【问题标题】:TypeScript: Can I check if a type contains undefined even when strictNullChecks is false?TypeScript:即使 strictNullChecks 为假,我是否可以检查类型是否包含未定义?
【发布时间】:2019-10-09 17:46:10
【问题描述】:

我们在 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

【问题讨论】:

    标签: typescript undefined strictnullchecks


    【解决方案1】:

    我不相信这是可能的。

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

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

    【讨论】:

    • 这是有道理的。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-25
    • 1970-01-01
    • 2023-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-24
    相关资源
    最近更新 更多