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

如何定义奇偶索引分属TypeA、TypeB且长度恒偶的递归数组类型

交替类型数组的TypeScript定义方案

你需要的这种固定位置类型、长度恒为偶数的数组,可以通过TypeScript的递归可变元组类型实现,具体方案如下:

适配你给出的 [A, B, A, B...] 结构

该结构对应从0开始计数的偶数索引(0、2、4...)为TypeA,奇数索引(1、3、5...)为TypeB,类型定义代码如下:

type OrderedMapArray<TypeA, TypeB> = [] | [TypeA, TypeB, ...OrderedMapArray<TypeA, TypeB>]

如果你需要排除空数组场景,只需去掉开头的[] |,即可约束数组长度至少为2且恒为偶数。

适配你描述的奇偶索引规则

如果你明确要求从0开始计数的奇数索引为TypeA、偶数索引为TypeB,仅需调换元组内两个类型的顺序即可:

type AlternatingArray<TypeA, TypeB> = [] | [TypeB, TypeA, ...AlternatingArray<TypeA, TypeB>]

使用示例

以TypeA为字符串、TypeB为数字为例:

// 合法示例:长度为偶数,类型位置匹配
const validArr: OrderedMapArray<string, number> = ["key1", 1, "key2", 2]

// 非法示例1:长度为奇数,类型校验不通过
const invalidLenArr: OrderedMapArray<string, number> = ["key1", 1, "key2"]

// 非法示例2:位置类型不匹配,类型校验不通过
const invalidTypeArr: OrderedMapArray<string, number> = ["key1", "value", 2, 3]

这个定义完全匹配marijnh的orderedmap模块内部使用的数组存储结构,所有不符合规则的赋值都会触发TypeScript的类型报错。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 11:45:00