如何在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
相关产品推荐
相关产品推荐

