You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于索引将元组拆分为两个部分的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 21:28:16