如何在TypeScript中根据参数元组长度动态推断返回元组类型?
实现元组长度动态推断的拼接函数
要让TypeScript准确推断拼接后元组的具体类型(包括长度和元素类型),需要修改函数的泛型定义,针对具体元组类型而非宽泛的数组类型进行约束和推断:
修改后的代码
function concatTuples<First extends readonly any[], Second extends readonly any[]>( first: First, second: Second ): [...First, ...Second] { return [...first, ...second] as [...First, ...Second]; } const result = concatTuples([0, 1], [2, 3]); // result 的类型会被推断为 [number, number, number, number]
关键改动说明
- 用两个独立泛型
First和Second分别约束两个输入元组,extends readonly any[]确保它们是元组/只读数组类型 - 返回类型直接使用元组展开语法
[...First, ...Second],TypeScript会自动将两个输入元组的类型合并为一个新的具体元组类型 - 传入固定长度的字面量时,函数的泛型约束会触发TypeScript将其推断为元组类型,而非普通数组
扩展验证
如果传入不同长度或不同元素类型的元组,也能正确推断结果类型:
const mixedResult = concatTuples([1, "a"], [true, null]); // mixedResult 类型为 [number, string, boolean, null]
内容的提问来源于stack exchange,提问作者Jakub Kvba
相关产品推荐
相关产品推荐

