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

如何根据泛型参数获取泛型函数的正确返回类型?

解决泛型函数特定参数下的返回类型推断问题

你遇到的问题核心在于:typeof f1得到的是一个未指定类型参数的泛型函数类型,而非针对number参数实例化后的具体函数类型。当你直接用条件类型匹配时,TypeScript无法自动将泛型参数T绑定为number,反而会因为泛型的通用性,将T推断为unknown,最终导致返回类型不符合预期。

下面给你两种可靠的解决方法:

方法1:使用ReturnType工具类型 + 显式指定泛型参数

这是最直接的方式,先将泛型函数实例化为针对number参数的版本,再用ReturnType提取返回类型:

function f1<T>(o: T) { return { a: o } }
type T1 = ReturnType<typeof f1<number>>; // 类型为 { a: number }

方法2:用条件类型显式约束泛型参数

如果你一定要用条件类型的写法,可以先让泛型函数的类型参数绑定为number,再推断返回类型:

function f1<T>(o: T) { return { a: o } }
type T1 = (typeof f1)<number> extends (o: number) => infer R ? R : never; // 类型为 { a: number }

为什么原来的写法不行?

原来的代码typeof f1 extends (n: number) => infer R ? R : never中,typeof f1是泛型函数类型<T>(o: T) => { a: T }。当TypeScript检查它是否匹配(n: number) => infer R时,会将泛型参数T视为兼容number的任意类型(因为泛型函数需要支持所有可能的T),所以最终T被推断为unknown,导致返回类型不符合预期。显式指定泛型参数是解决这个问题的关键。

内容的提问来源于stack exchange,提问作者Jacob

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 05:07:40