TypeScript疑问:never extends any是true吗?为何t<never>返回never?
问题解析
先看你给出的代码:
type t<U> = U extends any ? (k: U) => void : never // true type t1 = never extends any ? true : false // never type t2 = t<never>
核心差异在于条件类型是否是分布式的,具体解释如下:
1. 为什么never extends any ? true : false返回true
never是TypeScript里的“空类型”,代表不存在任何值的类型。TypeScript类型系统有个规则:never是所有类型的子类型,自然也包含any。所以直接做条件判断时,never extends any的结果为真,最终返回true。
2. 为什么t<never>返回never
这里的t<U>属于分布式条件类型——当泛型参数U是联合类型时,条件类型会自动拆分联合类型的每个成员单独判断,再把结果合并成新的联合类型。
而never可以看作是空的联合类型,对于分布式条件类型来说,空联合没有任何成员能参与分支判断,所以最终结果直接是never,不会走后面的分支逻辑。
内容的提问来源于stack exchange,提问作者min
相关产品推荐
相关产品推荐

