如何在TypeScript中获取元组尾部第N个类型?
获取元组类型中倒数第N个类型的实现方法
可以通过TypeScript的条件类型和元组长度计算,实现一个通用的类型工具NthTypeOfTuple,直接从元组尾部定位目标类型。
实现代码
type NthTypeOfTuple<T extends any[], N extends number> = T[T['length'] extends infer L extends number ? L + N : never];
原理说明
- 获取元组长度:通过
T['length']获取输入元组的长度,并用infer将其推断为具体的数字字面量类型L。 - 计算实际索引:将负数索引
N与元组长度L相加,得到对应的正数索引(比如元组长度为4,索引-2对应的实际索引是4 + (-2) = 2)。 - 访问目标类型:用计算出的实际索引直接访问元组类型,得到对应位置的类型。
验证示例
type UserType = 'vendor' | 'customer' | 'staff'; type SignUpParameters = [string, string, boolean, UserType]; // 取倒数第2个类型,结果为boolean type IsAdmin = NthTypeOfTuple<SignUpParameters, -2>; // 取倒数第1个类型,结果为UserType type UserRole = NthTypeOfTuple<SignUpParameters, -1>; // 取正数索引第0个类型,结果为string type FirstParam = NthTypeOfTuple<SignUpParameters, 0>;
边界情况说明
如果输入的负数索引绝对值超过元组长度(比如对长度为4的元组传入-5),计算出的索引会超出元组的有效范围,此时类型会返回never。
内容的提问来源于stack exchange,提问作者Pratik Mehta
相关产品推荐
相关产品推荐

