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

TypeScript中如何获取指定参数类型的重载函数返回值类型?

TypeScript 重载函数指定版本返回值类型获取方案

你需要的仅通过指定参数类型获取对应重载返回值的方案是存在的,我们可以通过自定义TS工具类型实现,完全在类型层面完成匹配,不需要编写任何运行时代码。

TS原生的ReturnType只会取重载函数的最后一个签名做推断,这也是无法直接用ReturnType匹配指定重载的核心原因,我们自定义的工具类型通过显式传入参数类型,就能精准匹配到目标重载签名。


自定义工具类型实现

type OverloadReturnType<T extends (...args: any[]) => any, Params extends any[]> =
  T extends (...args: Params) => infer R ? R : never;

用法示例

以你给出的重载函数为例:

function fn(arg: string): string;
function fn(arg: number): number;
function fn(arg: string | number): string | number {
    return arg;
}

// 匹配入参为string的重载,返回值类型为string
type Type1 = OverloadReturnType<typeof fn, [string]>;
// 匹配入参为number的重载,返回值类型为number
type Type2 = OverloadReturnType<typeof fn, [number]>;

注意事项

  • 匹配规则和TS重载匹配逻辑一致,会按重载声明的先后顺序匹配符合参数类型的签名
  • 支持匹配带可选参数、剩余参数的重载,只需要将第二个参数的元组类型和目标重载的入参类型对齐即可
  • 如果传入的参数类型没有匹配到任何重载,会返回never类型,方便排查错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 15:45:03