如何定义必须以特定顺序特定值开头的TypeScript数组类型?
解决TypeScript特定开头顺序的数组类型定义问题
你需要的是强制数组前两个元素必须按顺序为'hello'和'goodbye',后续可追加任意数量字符串的类型,通过元组+剩余元素语法就能实现:
type SpecificArray = ['hello', 'goodbye', ...string[]];
验证效果
const myArray: SpecificArray = []→ 不合法(缺少前两个必填元素)const myArray: SpecificArray = ['']→ 不合法(第一个元素不是'hello')const myArray: SpecificArray = ['something']→ 不合法(第一个元素不是'hello')const myArray: SpecificArray = ['hello']→ 不合法(缺少第二个元素'goodbye')const myArray: SpecificArray = ['hello', 'goodbye']→ 合法(符合前两个元素要求)const myArray: SpecificArray = ['hello', 'goodbye', 'something']→ 合法(后续可追加任意字符串)
为什么之前的方案无效
('hello'|'goodbye'|string)[]:这是普通数组类型,仅限制元素类型,不约束顺序和最小长度,所以空数组、单个元素等情况都能通过校验。['hello'|'goodbye'|string]:这是固定长度为1的元组,只能包含一个元素,完全不符合你需要的至少两个特定开头元素的要求。LiteralUnion<'hello'|'goodbye', string>[]:本质还是数组类型,没有强制前两个元素的顺序和数量,无法满足你的场景。
内容的提问来源于stack exchange,提问作者jackdomleo7
相关产品推荐
相关产品推荐

