【问题标题】:In TypeScript why is it OK to assign `null` to the variable of type `undefined` and vice versa在 TypeScript 中,为什么可以将 `null` 分配给`undefined` 类型的变量,反之亦然
【发布时间】:2017-02-08 08:37:23
【问题描述】:

来自 TypeScript 规范:

Null 类型是所有类型的子类型,Undefined 类型除外。未定义类型是所有类型的子类型。

据此,我相信,我们可以得出结论,undefinednull 的子类型,例如,number 的子类型。我们不能将超类型分配给子类型,例如,number 不能分配给undefined。为什么null,虽然是undefined 的超类型,但可以分配给undefined

let x: undefined;
x = 5;  // Error

let y: undefined;
y = null; // OK

【问题讨论】:

    标签: typescript


    【解决方案1】:

    由于原始 TypeScript 规范中定义了许多算法的方式,非常希望子类型关系具有严格的方向性(例如,不存在不相同的 ST,因此 STT 的子类型是 S 的子类型,减去 any 总是被允许做奇怪的事情)。如果不是这种情况,您会看到一些奇怪的行为,主要是围绕数组文字的类型,具体取决于其元素的顺序。

    如果子类型关系允许循环,还会引入其他一些微妙的问题,目前我无法具体回忆起这些问题。联合类型的引入有效地消除了严重依赖非循环子类型的“最佳通用类型”算法,因此这些理论问题在当前版本的 TypeScript 中可能并不明显。

    具体选择哪一个来创建另一个的子类型几乎是任意的。

    【讨论】:

    • 所以nullundefined 具有严格的方向子类型关系,但实际上为了方便起见它们之间存在循环关系?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-13
    • 2021-12-12
    • 2012-12-19
    • 2018-03-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多