如何创建符合指定Union类型的数组,无需手动复制元素?
解决TypeScript联合类型与运行时数组一致性问题
核心思路
先定义运行时数组作为唯一数据源,再基于该数组推导联合类型,从根源上避免手动同步类型成员和数组元素的麻烦。
具体实现代码
// 唯一数据源:运行时数组 const nameList = [ 'email', 'newEmail', 'password', 'passwordConfirm', 'deleteAccountPassword' ] as const; // as const 强制TS推导元素为具体字面量类型,而非宽泛的string // 基于数组自动推导联合类型 type NameUnion = typeof nameList[number]; // 直接用数组做判断,类型和数组天然保持一致 if(nameList.includes(name as NameUnion)){ // 执行业务逻辑 }
关键细节说明
as const必不可少:它会锁定数组元素的类型为具体的字符串字面量,确保推导出来的NameUnion是你需要的联合类型,而不是模糊的string。- 类型断言的作用:如果
name的类型是宽泛的string,需要用name as NameUnion来满足includes方法的类型校验;如果提前给name定义了string | NameUnion类型,则可以省略断言。
内容的提问来源于stack exchange,提问作者Richardson
相关产品推荐
相关产品推荐

