TypeScript如何定义数组类型使其元素仅为指定枚举成员值
约束数组仅存储指定枚举成员值的类型标注方法
直接使用枚举名[]作为数组的类型标注即可,TypeScript会自动收集该枚举下所有成员值组成联合类型,作为数组成员的校验规则,拦截所有非枚举成员的赋值。
代码示例
enum example { key1 = 'A', key2 = 2, key3 = '3', }; // 校验通过:所有元素均为example枚举成员 const validArray: example[] = [example.key1, example.key2]; // 校验报错:'other'不属于example枚举的合法成员值 const invalidArray: example[] = [example.key1, 'other'];
注意事项
- 不建议手动拼接枚举值的联合类型做标注(例如写
('A' | 2 | '3')[]),后续枚举增删成员时需要同步修改类型定义,维护成本高 - 不要使用
any[]、unknown[]这类宽松类型标注数组,会完全丢失枚举成员的校验能力 - 该方案天然兼容混合值枚举(同时包含数字、字符串类型成员值的枚举),枚举成员变更时校验规则会自动同步,不需要额外调整类型
如果需要限制数组仅能存入某几个特定枚举成员,可以在数组标注时传入对应成员的联合类型,例如把
example[]改成(example.key1 | example.key2)[],此时存入example.key3也会触发类型报错。
内容的提问来源于stack exchange,提问作者Juan Antonio
相关产品推荐
相关产品推荐

