0

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

此测试应返回 True-Parameter 或 False-Parameter,具体取决于 P 参数是否包含 undefined。

这是当前代码:

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

所以我希望这两个都返回“是”:

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

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

4

1 回答 1

1

我不相信这是可能的。

“strictNullChecks”这个名字有点误导,因为它可能暗示它只是指示 TypeScript 编译器执行额外的检查并发出额外的警告。然而,它实际上改变了类型检查器的底层行为以及nullandundefined类型的语义。根据TypeScript 指南

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

于 2019-10-09T18:27:26.660 回答