我们在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
答案 0 :(得分:1)
我认为这是不可能的。
名称“ strictNullChecks”有点误导,因为它可能表明它仅指示TypeScript编译器执行附加检查并发出附加警告。但是,它实际上会更改类型检查器的基本行为以及null
和undefined
类型的语义。根据{{3}},
在严格的null检查模式下,null和undefined值不在每种类型的域中,并且只能分配给它们自己和任何值(一个例外是undefined也可以分配给void)。因此,而T和T | undefined在常规类型检查模式下被视为同义词(因为undefined被视为任何T的子类型),在严格类型检查模式下它们是不同的类型,只有T |未定义允许未定义的值。 T与T的关系也是如此。空。