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

如何获取重载函数的类型定义?

如何获取重载函数的类型定义?

刚好我之前也处理过类似的场景,针对你要获取OAuth2Client.prototype.getToken中getToken(code: string)这个特定重载的返回类型需求,有两种常用的方法,我给你详细拆解下:

方法一:用Extract精准匹配目标重载(推荐)

这种方法不需要依赖重载的定义顺序,通过匹配函数的参数签名来精准定位目标重载,可靠性更高。具体代码如下:

// 提取符合参数为string的getToken重载,再获取它的返回类型
type GetTokenResponse = ReturnType<Extract<typeof OAuth2Client.prototype.getToken, (code: string) => any>>;

原理是:

  • typeof OAuth2Client.prototype.getToken会获取到getToken的全部重载类型集合
  • Extract<..., (code: string) => any>会从集合中筛选出参数为string的那个重载函数类型
  • 最后用ReturnType提取该函数的返回类型

方法二:通过重载索引直接获取(注意顺序陷阱)

TypeScript中,重载函数的类型会以数组形式存储,但数组的索引顺序和你定义重载的顺序是相反的——第一个定义的重载对应数组的最后一个索引,最后定义的重载对应数组的第一个索引。

假设getToken的重载定义是这样的:

class OAuth2Client {
  // 第一个重载
  getToken(code: string): Promise<{ access_token: string }>;
  // 第二个重载
  getToken(options: { refresh_token: string }): Promise<{ access_token: string; refresh_token: string }>;
  // 实现体
  getToken(arg: string | { refresh_token: string }) {
    return Promise.resolve({ access_token: 'dummy' });
  }
}

那么你要的getToken(code: string)是第一个定义的重载,对应的索引是1,代码如下:

type GetTokenResponse = ReturnType<(typeof OAuth2Client.prototype.getToken)[1]>;

这种方法的缺点是如果后续重载的顺序被修改,你的类型定义就会出错,所以只适合重载结构固定不会变动的场景。

备注:内容来源于stack exchange,提问作者Gajus

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.21 14:23:07