当前位置: 首页 > 知识库问答 >
问题:

TypeScript:我可以检查一个类型是否包含未定义的,即使严格的NullChecks是false?

许彭祖
2023-03-14

我们在redux初学者工具包中遇到了一个问题,该库的用户禁用了strictNullChecks,我们的一个类型测试是短循环,返回不同情况的类型。

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

这是当前代码:

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

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

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

现在我问自己是否有另一种方法来测试这个,即使是严格的NullChecks:false

共有1个答案

钦高峯
2023-03-14

我认为这是不可能的。

名称“stratNullChecks”有点误导,因为它可能表明它只是指示TypeScript编译器执行额外的检查并发出额外的警告。但是,它实际上改变了类型检查器的底层行为以及null未定义类型的语义学。根据TypeScript指南,

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

 类似资料:
  • 问题内容: 使用普通的JavaScript(不是jQuery),是否可以检查元素是否 包含 类? 目前,我正在这样做: 问题是,如果我将HTML更改为此… …不再存在完全匹配的内容,因此我得到的默认输出为none()。但我还是想输出为,因为还 包含 了类。 问题答案: 使用方法: 这适用于所有当前浏览器,并且也有polyfill支持旧版本的浏览器。 或者 ,如果您使用较旧的浏览器,并且不想使用po

  • 问题内容: 我想知道一个类是否为枚举,但是我想我缺少了一些东西: 它给我一个错误,指出Enum.class无效。那么,如何检查类是否为枚举?我很确定有可能确定这一点,但我无法做到。 谢谢 问题答案: 正确的语法为: 但对于枚举,这是一种更方便的方法: 更新:对于带有主体的枚举项(例如,覆盖方法),这实际上将不起作用。在这种情况下,请使用 参考:

  • 问题内容: 给定一个整数,如何使用Java检查它是否包含0? 如何才能做到这一点? 问题答案: 您是说小数表示形式是否包含0?绝对 最简单的 方法是: 别忘了一个数字并不“固有地”包含一个0或不包含0(当然,零本身除外)-它取决于底数。因此,十进制的“ 10”是十六进制的“ A”,而十六进制的“ 10”是十进制的“ 16”……在两种情况下,结果都会改变。 在整数的十进制表示形式中,可能有更有效的方

  • 我得到了一列(),这是一个。 另一个几何是一个点,我只是想检查它是否在我的多边形之一。 我试过了: 它总是返回假;为什么我无法检查点是否在具有的多面内?

  • 我有一种对象变量叫做obj(Object obj)。我用的是obj。getClass()我想检查返回的类是否是一个特定的类,在我的例子中是一个名为Student的类。我该怎么做? 我尝试了,但它告诉我学生不能被解析为变量。是的,我已经做了我的研究,并在SO上发现了类似的问题,但出于某种原因,我没有做任何工作。