ouuan / blog-comments

用作博客评论存放 | Comments of my blog
1 stars 0 forks source link

TypeScript 中子类型判定的基本原则,特例,以及相关操作 - ouuan的博客 #52

Open utterances-bot opened 2 years ago

utterances-bot commented 2 years ago

TypeScript 中子类型判定的基本原则,特例,以及相关操作 - ouuan的博客

类型是 TypeScript 中的基本概念,而两个类型之间是否存在子类型关系则决定了许多操作是否合法。多数类型的相关规则是非常符合直觉的,有些规则是符合逻辑而不一定符合直觉的,而少数规则则是例外。本文试图归纳一下子类型判定的基本原则,特例,以

https://ouuan.github.io/post/typescript-subtype-principle-exceptions-and-operations/

GJayun commented 2 years ago

%%%

tonyfettes commented 1 year ago

never 是空集,也不具有任何“能力”(这是“集合越小,能力越强”的一个反例)。

我不同意这个点。

never 可以具有任意强的能力。从集合的角度来说是空集,也就是所有集合的子集。从子类型的角度来看,这个类型是所有类型的子类型,也就是继承了所有类型的特性/方法等。从交合类型来看,这个类型也是所有类型的交。我们不能构造一个 never 类型的值,但这并不妨碍 never 这个类型有着最“强”的能力。或者说为了整个系统是相融的,我们必须无法构造一个这样类型的值。

ouuan commented 1 year ago

never 可以具有任意强的能力。从集合的角度来说是空集,也就是所有集合的子集。从子类型的角度来看,这个类型是所有类型的子类型,也就是继承了所有类型的特性/方法等。

理论上来说,为了保持这套逻辑的自洽性,空集应该具有任意强的能力,但实际上 TypeScript 不是完全符合这套逻辑的,例如你不能访问 never 类型的任何属性。

tonyfettes commented 1 year ago

确实。受教了,感谢。