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

如何在TypeScript中定义支持任意数量参数的对应返回类型函数类型

在TypeScript中定义支持任意数量参数的对应返回类型函数

你当前的G类型通过重载实现了1-2个参数的类型推导,但要支持任意数量的参数并返回对应类型的元组,可以利用TypeScript的可变参数泛型来实现,无需逐个编写重载:

首先保留原类型定义:

type A = {
  aa: string;
  bb: number;
};

重新定义G类型:

type G = <T extends keyof A[]>(
  ...args: T
) => { [Index in keyof T]: A[T[Index]] };

或者更直观的等价写法:

type G = <T extends Array<keyof A>>(
  ...args: T
) => { [K in keyof T]: A[T[K]] };

使用示例:

const g = {} as G;
const x = g('aa'); // 类型推导为 string
const y = g('bb', 'aa'); // 类型推导为 [number, string]
const z = g('bb', 'aa', 'bb'); // 类型推导为 [number, string, number]
// 传入非法键会报错:Argument of type '"cc"' is not assignable to parameter of type 'keyof A'

实现说明

  • T extends Array<keyof A>:约束泛型T是由A的键构成的数组类型,确保所有传入参数都是A的合法键
  • ...args: T:函数接收任意数量的参数,参数类型受T约束
  • 返回值{ [K in keyof T]: A[T[K]] }:遍历参数数组的每个索引,将对应位置的参数键映射到A中对应的属性类型,最终生成与参数数量、类型完全匹配的元组类型

这样既支持任意数量的合法参数,又能准确推导返回类型,同时自动拦截非法参数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 13:17:13