从打字稿规范:
Null 类型是所有类型的子类型,Undefined 类型除外。未定义类型是所有类型的子类型。
据此,我相信,我们可以得出结论,它undefined是 的一个子类型null,例如number。我们不能将超类型分配给子类型,例如,number不可分配给undefined. 为什么null,虽然是超类型 toundefined可分配给undefined?
let x: undefined;
x = 5; // Error
let y: undefined;
y = null; // OK
Run Code Online (Sandbox Code Playgroud)
由于原始 TypeScript 规范中许多算法的定义方式,非常希望子类型关系是严格定向的(例如,没有不相同的S和T存在,这样S是 的子类型T和T是 的子类型S,减去any总是允许做奇怪的事情)。如果不是这种情况,您会看到一些奇怪的行为,主要围绕数组文字的类型,具体取决于其元素的顺序。
如果子类型关系允许循环,还会引入一些其他微妙的问题,目前我无法具体回忆起这些问题。联合类型的引入有效地消除了严重依赖非循环子类型的“最佳常见类型”算法,因此这些理论问题在当前版本的 TypeScript 中可能并不明显。
确切选择将哪一个创建为另一个的子类型几乎是任意的。
| 归档时间: |
|
| 查看次数: |
1390 次 |
| 最近记录: |