Open utterances-bot opened 2 years ago
%%%
never 是空集,也不具有任何“能力”(这是“集合越小,能力越强”的一个反例)。
我不同意这个点。
never
可以具有任意强的能力。从集合的角度来说是空集,也就是所有集合的子集。从子类型的角度来看,这个类型是所有类型的子类型,也就是继承了所有类型的特性/方法等。从交合类型来看,这个类型也是所有类型的交。我们不能构造一个 never
类型的值,但这并不妨碍 never
这个类型有着最“强”的能力。或者说为了整个系统是相融的,我们必须无法构造一个这样类型的值。
never
可以具有任意强的能力。从集合的角度来说是空集,也就是所有集合的子集。从子类型的角度来看,这个类型是所有类型的子类型,也就是继承了所有类型的特性/方法等。
理论上来说,为了保持这套逻辑的自洽性,空集应该具有任意强的能力,但实际上 TypeScript 不是完全符合这套逻辑的,例如你不能访问 never
类型的任何属性。
确实。受教了,感谢。
TypeScript 中子类型判定的基本原则,特例,以及相关操作 - ouuan的博客
类型是 TypeScript 中的基本概念,而两个类型之间是否存在子类型关系则决定了许多操作是否合法。多数类型的相关规则是非常符合直觉的,有些规则是符合逻辑而不一定符合直觉的,而少数规则则是例外。本文试图归纳一下子类型判定的基本原则,特例,以
https://ouuan.github.io/post/typescript-subtype-principle-exceptions-and-operations/