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

如何通过编程方式获取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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 18:33:26