TypeScript:即使strictNullChecks为false,我是否也可以检查类型是否包含未定义?

时间:2019-10-09 17:46:10

标签: typescript undefined strictnullchecks

我们在redux-starter-kit中遇到了一个问题,该库的用户禁用了strictNullChecks,而我们的类型测试之一是短路,返回了不同情况下的类型。

此测试应返回True参数或False参数,具体取决于P参数是否包含未定义。

这是当前代码:

type IfMaybeUndefined<P, True, False> = [undefined] extends [P] ? True : False;

因此,我希望它们都返回“是”:

IfMayBeUndefined<number, "no", "yes">
IfMayBeUndefined<number|undefined, "yes", "no">

现在我在问自己,即使使用strictNullChecks,是否还有另一种方法可以测试:false

1 个答案:

答案 0 :(得分:1)

我认为这是不可能的。

名称“ strictNullChecks”有点误导,因为它可能表明它仅指示TypeScript编译器执行附加检查并发出附加警告。但是,它实际上会更改类型检查器的基本行为以及nullundefined类型的语义。根据{{​​3}},

  

在严格的null检查模式下,null和undefined值不在每种类型的域中,并且只能分配给它们自己和任何值(一个例外是undefined也可以分配给void)。因此,而T和T | undefined在常规类型检查模式下被视为同义词(因为undefined被视为任何T的子类型),在严格类型检查模式下它们是不同的类型,只有T |未定义允许未定义的值。 T与T的关系也是如此。空。