如何访问TypeScript函数泛型的约束类型?
解决TypeScript获取未导出泛型约束类型的问题
可以通过TypeScript的条件类型结合infer关键字提取未导出的BaseData类型,无需手动复制。具体实现步骤如下:
定义工具类型
先写一个通用工具类型,用来提取函数泛型参数的约束类型:
type GetGenericConstraint<T> = T extends <Data extends infer U>(...args: any[]) => any ? U : never;
提取目标类型
导入getData函数后,用上述工具类型获取BaseData的等价类型:
import { getData } from '目标库'; type MyType = GetGenericConstraint<typeof getData>;
此时MyType就完全等价于库中未导出的BaseData,可以直接在后续代码中引用。
原理说明
- 条件类型
T extends <Data extends infer U>(...args: any[]) => any ? U : never会校验传入的类型T是否为带有泛型参数Data且该参数受U约束的函数 - 匹配成功时,
infer U会自动提取出这个约束类型U(即BaseData) - 最终将提取到的类型赋值给
MyType完成类型复用
内容的提问来源于stack exchange,提问作者Ilja
相关产品推荐
相关产品推荐

