TypeScript 使用“extends”关键字和三元运算符支持条件类型。
等于 true 的条件类型示例:
type C1 = 7 extends number ? true : false
type C2 = 7 extends number | string ? true : false
type C3 = 7 extends 7 | 'cat' | null ? true : false
type C4 = [1,2,3] extends [1,2,3] ? true : false
type C5 = any[] extends any[] ? true : false
Run Code Online (Sandbox Code Playgroud)
我理解上面的条件(即使“扩展”在非 OOP 上下文中看起来很奇怪)。
以下条件我不明白:
type Q1 = any[] extends readonly any[] ? true : false // evals to true
type Q2 = readonly any[] extends any[] ? true : false // evals to false
Run Code Online (Sandbox Code Playgroud)
为什么 Q1 的计算结果为 true,而 Q2 的计算结果为 false?我的预期恰恰相反,因为只读数组似乎比通用数组“更具体”。
在这种情况下,“延伸”的真正含义是什么?
我正在使用TypeScript Playground来测试这些条件。
extends意思是“是……的子类型”。不多也不少。“A是”的子类型B意味着“每个实例都A可以分配给类型的变量B”。再说一次,不多也不少。
所以我们需要问的唯一问题是: a 是否T[]可分配给readonly T[]?好吧,readonly T[]允许我们访问数组的元素。T[]允许我们访问数组的元素并对其进行变异。因此T[]支持所有操作readonly T[]以及一些操作。因此,该关系成立。
| 归档时间: |
|
| 查看次数: |
866 次 |
| 最近记录: |