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

如何使StaticArray类型支持联合长度参数生成对应元组?

解决StaticArray支持联合长度生成联合元组的问题

你当前实现的StaticArray仅能处理单一数值长度,遇到联合长度参数时会提前终止递归,只返回最小长度的元组。这是因为当L为联合类型时,递归过程中只要R['length']匹配到联合中的任意一个值(即最小长度),就会直接返回当前的R,不会继续生成更长的元组。

要实现支持联合长度生成对应联合元组的需求,核心是利用TypeScript的分配条件类型,让联合长度中的每个成员单独触发静态数组的生成逻辑,最后合并结果。

修改后的实现代码

// 内部辅助类型:负责生成单一长度的静态数组
type _StaticArray<T, L extends number, R extends any[] = []> = 
  R['length'] extends L ? R : _StaticArray<T, L, [...R, T]>;

// 对外暴露的工具类型:处理联合长度的分配逻辑
export type StaticArray<T, L extends number> = L extends L ? _StaticArray<T, L> : never;

效果验证

当传入联合长度参数时,比如StaticArray<number, 3 | 2 | 1>,TypeScript会自动对每个联合成员(3、2、1)分别执行_StaticArray逻辑,最终生成的类型为:

[number, number, number] | [number, number] | [number]

原理说明

  • L extends L是触发分配条件类型的关键:当L为联合类型时,这个表达式会将联合拆分为单个成员,对每个成员单独计算_StaticArray<T, L>。
  • 内部的_StaticArray保持原有的递归逻辑,负责生成指定单一长度的静态数组,确保每个长度对应的元组都能正确生成。
  • 所有单个长度的元组类型最终会合并为一个联合类型,满足需求。

内容的提问来源于stack exchange,提问作者Guillaume Racicot

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 08:37:37