You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 12:47:08