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

如何用TypeScript工具类型从Set类型Bar中提取泛型参数Foo?

提取Set泛型参数的TypeScript工具类型

可以通过条件类型实现你需要的SomethingMagic工具类型,直接匹配Set<T>结构并提取内部的泛型参数:

type SomethingMagic<T extends Set<any>> = T extends Set<infer U> ? U : never;

// 测试示例
type Foo = { id: number };
type Bar = Set<Foo>;
type Baz = SomethingMagic<Bar>; // Baz 等价于 Foo

核心逻辑说明

  • T extends Set<any>:约束输入类型必须是Set的子类型,避免传入非Set类型导致无意义的推断
  • T extends Set<infer U>:利用TypeScript的**类型推断(infer)**特性,自动识别Set内部的泛型参数并赋值给U
  • 最终返回推断出的U,若输入不符合Set类型则返回never

如果需要兼容只读集合ReadonlySet,可以扩展条件:

type ExtractSetElement<T> = 
  T extends Set<infer U> ? U :
  T extends ReadonlySet<infer U> ? U :
  never;

type ReadonlyBar = ReadonlySet<Foo>;
type ReadonlyBaz = ExtractSetElement<ReadonlyBar>; // 同样等价于 Foo

内容的提问来源于stack exchange,提问作者Nino Filiu

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 20:32:34