在没有非空断言的情况下,对函数上部作用域中重用的const赋null检查



看下面的代码片段:

const [interval, setInterval] = useState<PartialInterval | null>(null);
const handleDaySelect = (day: DateData) => {
const isStartSelected = interval?.start;
const isEndSelected = interval?.end;
if (!isStartSelected) {
setInterval({ start: parseDayToDate(day.dateString) });
return;
}
if (isStartSelected && !isEndSelected) {
const isSelectedEndBeforeSelectedStart = isBefore(
parseDayToDate(day.dateString),
interval.start!,
);

if (isSelectedEndBeforeSelectedStart) {
setInterval({
start: parseDayToDate(day.dateString),
end: interval.start,
});
return;
}
setInterval({ ...interval, end: parseDayToDate(day.dateString) });
return;
}
if (isStartSelected && isEndSelected) {
setInterval({ start: parseDayToDate(day.dateString) });
}
};

其中interval的null检查在函数开始时被赋值为const值。在这种情况下,我想用no-non-null-assertion这样我就不必把每个声明写成这样interval.start!这在typescript中是可以实现的而不需要在每个if语句上显式地做检查吗?if(interval?.start)isStartSelected可以继续使用已经定义的检查

提前感谢!

一种方便的方法是使用断言函数来断言和处理interval不为空,并且在成功断言后返回interval对象。

Typescript永远不会抱怨它是null,因为它是从函数返回的。

所以这里的答案是:

使用在作用域顶部指定的const变量

因此,而不是编写变量isStartSelected并将其用作未定义的bool检查,您可以为变量分配一个更好的名称startInterval,然后ts将允许您使用您已分配的变量作为未定义检查以及能够在稍后的函数中解析和使用它。

问题过于复杂的简单例子

最新更新