如何让TypeScript函数返回所有传入参数的联合类型?
解决TypeScript函数返回参数类型联合的类型标注问题
你的代码里泛型约束<T extends []>限制了T只能是空数组的子类型,这会导致无法正确捕获传入的多元素参数的类型。调整泛型约束和返回类型即可实现需求:
// 假设getRandomInt是已实现的获取随机整数的函数,示例实现如下: const getRandomInt = (min: number, max: number) => Math.floor(Math.random() * (max - min)) + min; const getRandomParameter = <T extends unknown[]>(...args: T): T[number] => { const randomIndex = getRandomInt(0, args.length); return args[randomIndex]; };
验证效果:
const randomParameter = getRandomParameter(1, false, 'a', 'b'); typeof randomParameter; // 类型推断为 1 | false | 'a' | 'b',符合预期
关键调整说明:
- 将泛型约束从
<T extends []>改为<T extends unknown[]>,让T可以匹配任意元素类型的数组/元组,从而正确捕获所有传入参数的类型信息。 - 返回类型使用
T[number],对于元组类型来说,number索引会返回元组中所有元素类型的联合类型,正好对应你需要的返回类型。
内容的提问来源于stack exchange,提问作者micDropper
相关产品推荐
相关产品推荐

