我有以下打字稿代码:
type Nothing = undefined | null;
export const isNothing = <T>(val: T | Nothing): val is Nothing =>
val === null || typeof val === 'undefined';
isNothing
是一种类型保护,基本上检查是否设置了值。
我想在运行时之前检测以下内容:
const foo:number = 42;
if(isNothing(foo)) { /* ... */ }
这里的情况是类型保护是多余的。由于foo
是显式键入的,因此不能为null
或undefined
。
我一直在寻找以下几行的答案:
isNothing
不是联合类型,则重载never
以返回类型val
在这种情况下,“检测”可能是编译时错误,也可能是lint通知。重要的是,这将是运行前检测。
正如我在上面的评论中解释的那样,如果检查是多余的,则没有这样的解决方案,类型保护程序本身将阻止代码编译。我认为“类型联合”一词在这种特殊情况下是指不为null且未定义的变量,因此isNothing
类型防护检查将是多余的。
我最终选择了: