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

TypeScript如何定义仅支持MyLetter数组或其与MyNumber交替的数组类型?

解决方案

完整实现代码

// 题目给定的基础类型
type MyLetter = 'A' | 'B' | 'C'
type MyNumber = 1 | 3 | 5

// 简化别名:单个字母数组类型
type LetterArr = MyLetter[]

// 互递归定义交替序列规则
// 下一个位置需要放MyNumber的状态:可以直接结束,也可以放一个MyNumber后进入「需要放LetterArr」的状态
type ExpectNumber = [] | [MyNumber, ...ExpectLetter]
// 下一个位置需要放LetterArr的状态:必须先放一个LetterArr,之后进入「需要放MyNumber」的状态
type ExpectLetter = [LetterArr, ...ExpectNumber]

// 最终目标类型:两类合法结构的并集
type TargetArray = 
  // 第一类:完全由LetterArr构成的数组
  | LetterArr[]
  // 第二类:严格交替排列的数组
  | ExpectLetter

校验效果验证

合法示例(无TS类型报错)

// 交替结构示例
const valid1: TargetArray = [['A', 'B'], 1, ['C', 'A'], 3]
// 仅一个LetterArr的示例(同时属于两类合法结构)
const valid2: TargetArray = [['B']]
// 全LetterArr结构示例
const valid3: TargetArray = [['A'], ['B'], ['C']]

非法示例(触发TS类型报错)

// 出现非法值true+非允许的数字2
const invalid1: TargetArray = [['A', 'B'], true, ['C', 'A'], 2]
// 元素是单个字母而非字母数组
const invalid2: TargetArray = ['B']
// 首元素是数字而非字母数组
const invalid3: TargetArray = [1]
// 首元素是数字,顺序错误
const invalid4: TargetArray = [1, ['A', 'B'], ['C', 'A'], 2]

实现逻辑说明

  • 用互递归的两个类型ExpectLetter和ExpectNumber约束交替排列的顺序,保证序列一定以LetterArr开头,之后MyNumber和LetterArr严格交替,允许在任意位置结束
  • 第一类全LetterArr的结构直接用LetterArr[]实现,和交替结构取并集就覆盖了所有合法场景

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 22:24:03