如何用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
相关产品推荐
相关产品推荐

