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

TypeScript:如何获取指定参数元组的泛型函数实例返回类型?

问题描述

假设有这样一个泛型函数:

function example<T>(a: T, b: number): SomeType<T> {
   // 代码实现
}

我的目标是,在不清楚该函数泛型参数对应关系(比如泛型是基于第一个参数类型、第二个参数类型,还是存在两个泛型参数)的前提下,确定它接收参数元组[string, number]时的实例化返回类型。理想状态下能有一个工具类型InstantiatedReturnType<F, ParamTuple>,让InstantiatedReturnType<typeof example, [string, number]>等价于SomeType<string>。

目前已确认typeof example确实兼容(...args: [string, number]) => any类型,但始终无法提取对应参数元组类型的实例化返回类型:

  • 尝试将typeof example与(...args: [string, number]) => any取交集,ReturnType<>的结果会根据交集顺序不同,变成any或unknown;
  • 由于函数参数是逆变的,尝试取联合类型的ReturnType<>也没有效果。

需要说明的是,我不能直接使用ReturnType<typeof example<string>>,因为匹配参数元组[string, number]的实例化可能是example<number>——比如该函数的泛型参数实际对应第二个参数类型,第一个参数被显式定义为string。我的实际场景是:给定一个对象,其值是可供调用的候选函数(部分为泛型函数),我需要根据已有参数元组类型选择合适的函数调用,选择对应键的逻辑已经实现,但无法表达该调用的返回类型。

更新:我做了一个精简示例,实现了选择正确键的逻辑,同时包含一次获取匹配实例返回类型的失败尝试。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 19:50:21