如何定义奇偶索引分属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
相关产品推荐
相关产品推荐

