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

如何基于TypeScript接口的键设置函数返回值?

问题分析与解决

核心问题

你的类型错误源于返回类型定义偏差:

  • Pick<API, T> 获取的是API接口中对应T键的方法本身的类型(比如foo对应的是() => Promise<boolean>),而非方法执行后的返回值类型。
  • 因此函数返回的Promise<boolean>/Promise<number>无法匹配Promise<Pick<API, T>>,导致类型校验报错,同时返回类型推断也不符合预期。

修正方案

需要使用TypeScript内置类型工具提取方法的返回值和参数类型,调整proxy函数的类型定义:

完整修正代码

interface API {
    foo: () => Promise<boolean>,
    bar: (num: number) => Promise<number>
}

const theApi: API = {
    foo: () => Promise.resolve(true),
    bar: (num) => Promise.resolve(num * 2)
}

async function proxy<T extends keyof API>(
    method: T, 
    ...args: Parameters<API[T]>
): Promise<ReturnType<API[T]>> {
  return theApi[method](...args);
}

// 类型推断正确:Promise<boolean>
const myReturn = proxy('foo');
// 支持参数传递,且类型自动校验:必须传入number类型
const barReturn = proxy('bar', 10);

关键类型工具说明

  • Parameters<API[T]>:提取API[T]方法的参数类型,作为proxy函数的可变参数类型,保证参数类型与原方法完全匹配。
  • ReturnType<API[T]>:提取API[T]方法的返回值类型,作为proxy函数的返回类型,实现精准的类型推断。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 14:47:14