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

为何TypeScript工具类型Extract<boolean, false>返回false而非never?

为什么Extract<boolean, false>返回false而非never?

这核心原因在于TypeScript的分布式条件类型机制——当条件类型的左操作数是一个「裸类型参数」(即没有被包裹在数组、元组、对象等结构中的泛型参数)时,TypeScript会自动将联合类型的每个成员单独代入条件判断,再将结果合并为新的联合类型。

拆解Extract<boolean, false>的执行逻辑

首先要明确:boolean是TypeScript内置的类型别名,本质是true | false的联合类型。而Extract<T, U>的实现是:

type Extract<T, U> = T extends U ? T : never;

这里的T是裸类型参数,所以当传入T = boolean(即true | false)时,会触发分布式条件类型:

  • 第一步:将联合类型拆分为单个成员,分别代入判断:
    • true extends false ? true : never → 返回never
    • false extends false ? false : never → 返回false
  • 第二步:将两个结果合并为联合类型:never | false,而never是所有类型的子类型,会被自动吸收,最终结果就是false。

为什么直接写boolean extends false ? true : never会返回never?

因为这里的左操作数不是「裸类型参数」,而是具体的boolean类型,所以不会触发分布式条件类型。TypeScript会直接判断整个boolean类型是否是false的子类型——显然boolean包含true和false,并不完全属于false的子类型,因此条件不成立,返回never。

内容的提问来源于stack exchange,提问作者Niels Gregersen

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 06:01:30