如何通过编程方式获取TypeScript函数类型的泛型约束
TypeScript泛型函数约束推断问题
我们有如下带泛型约束的函数类型:
type SomeFunction = <T extends string>(a: number, b: T) => { number: T }
需求是:根据传入的props推断一系列这类未知函数的返回类型,但预先不知道具体的函数列表。为此,需要先确定这类函数泛型参数的约束条件。
初始尝试
我们先定义了一个通用函数类型,用来匹配目标函数,并验证了匹配性:
type GenericFunction<T> = <G extends T>(...arg: [any, G]) => any type Test = SomeFunction extends GenericFunction<string> ? true : false // true
这一步是可行的,Test返回true,说明SomeFunction确实符合GenericFunction<string>的结构。
遇到的问题
但当尝试用infer自动推断约束类型U时,得到了预期外的结果:
type GenericFunction<T> = <G extends T>(...arg: [any, G]) => any type Test = SomeFunction extends GenericFunction<infer U> ? U : false // false
已知<G extends T>的推断逻辑和常规推断相反:GenericFunction<never>可以兼容SomeFunction,但GenericFunction<any>不行,它仅能兼容类似下面的类型:
type SomeOtherFunction = <T extends any>(a: number, b: T) => { number: T }
请问是否有办法解决这个泛型约束的推断问题?
内容的提问来源于stack exchange,提问作者Michał Sadowski
相关产品推荐
相关产品推荐

