如何从TypeScript泛型类型中提取模板参数?
提取泛型类型的默认模板参数
从TypeScript 4.7版本开始,已经支持通过条件类型的infer语法提取泛型类型的默认模板参数,你给出的代码现在可以正常工作。
验证示例
type bla<T = number> = 123; // 提取默认参数类型 type T = bla extends bla<infer U> ? U : never; // T 的类型为 number
原理说明
当你直接使用未指定参数的泛型类型(如bla)时,TypeScript会自动将其视为使用了默认参数的实例(即bla<number>)。此时通过条件类型的infer关键字,就能从这个默认实例中提取出对应的模板参数类型。
多参数泛型的情况
如果泛型包含多个带默认值的参数,同样可以依次提取:
type Foo<T = string, U = boolean> = [T, U]; type DefaultT = Foo extends Foo<infer T, infer U> ? T : never; // string type DefaultU = Foo extends Foo<infer T, infer U> ? U : never; // boolean
内容的提问来源于stack exchange,提问作者Page not found
相关产品推荐
相关产品推荐

