基于索引将元组拆分为两个部分的TypeScript类型实现
实现基于指定索引拆分元组的TypeScript类型
你可以通过递归累积结合类型推断的方式实现这个需求,利用TypeScript的数组长度特性和infer关键字完成元组拆分:
type TupleToChunksAt<N extends number, T extends any[], Acc extends any[] = []> = // 累积数组长度达到指定索引时,返回拆分结果 Acc['length'] extends N ? [Acc, T] : // 拆分元组首元素,加入累积数组后继续递归 T extends [infer First, ...infer Rest] ? TupleToChunksAt<N, Rest, [...Acc, First]> : // 处理元组长度不足N的边界情况 [Acc, T];
测试验证
type Test = TupleToChunksAt<1, [1, 2, 3]>; // 结果:[[1], [2, 3]] type TestStartAt0 = TupleToChunksAt<0, [1, 2, 3]>; // 结果:[[], [1, 2, 3]] type TestFullSplit = TupleToChunksAt<3, [1, 2, 3]>; // 结果:[[1, 2, 3], []] type TestLongTuple = TupleToChunksAt<2, ['a', 'b', 'c', 'd']>; // 结果:[['a', 'b'], ['c', 'd']] type TestShortTuple = TupleToChunksAt<5, [1, 2]>; // 结果:[[1, 2], []]
实现逻辑说明
Acc作为默认空的累积数组,负责收集元组的前N个元素- 每次递归判断累积数组长度是否等于目标索引
N,满足则返回[累积数组, 剩余元组] - 若元组仍可拆分出首元素,就将其加入累积数组,继续递归处理剩余部分
- 当元组长度小于
N时,直接返回整个元组和空数组,保证类型的鲁棒性
内容的提问来源于stack exchange,提问作者zedryas
相关产品推荐
相关产品推荐

