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

如何将泛型应用于联合类型成员:从Some<1|2|3>转为Some<1>|Some<2>|Some<3>

解决TypeScript嵌套泛型的联合类型展开问题

可以通过分布式条件类型实现这个转换。TypeScript在条件类型中处理联合类型时会自动分发,利用这个特性就能把Some<1 | 2 | 3>拆成Some<1> | Some<2> | Some<3>。

实现代码如下:

type Some<A> = {type: A}
type Union1 = Some<1 | 2 | 3>

// 核心转换类型
type Distribute<T> = T extends Some<infer U> ? Some<U> : never

type Result = Distribute<Union1> // 类型为 Some<1> | Some<2> | Some<3>

原理说明

  • 当T是Some<1 | 2 | 3>这种联合类型的包裹时,T extends Some<infer U>会触发分布式条件类型,自动把U拆解成1 | 2 | 3的每个成员。
  • 对每个成员重新应用Some<U>,最后合并成新的联合类型,正好得到你需要的Union2结构。

如果你的实际场景中Some是更复杂的对象类型,这个逻辑同样适用,只要保证infer U能正确提取到内部的联合类型成员即可。

内容的提问来源于stack exchange,提问作者florian norbert bepunkt

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 07:27:53