在TypeScript中,为什么可以将`null`赋给`undefined`类型的变量,反之亦然

时间:2017-02-08 08:37:24

标签: typescript

从TypeScript规范:

  

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

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

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

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

1 个答案:

答案 0 :(得分:2)

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

如果子类型关系允许循环,那么还会引入一些其他微妙的问题,我现在无法回忆起这些问题。联合类型的引入有效地消除了最常见的类型"算法很大程度上依赖于非圆形子类型,所以这些理论问题在当前的TypeScript版本中可能并不明显。

制作另一个子类型的确切选择几乎是任意的。