如何更优雅地实现TypeScript角色数组与单个角色类型定义?
更优雅的实现方式
可以利用TypeScript的const断言和类型推导能力,只定义一次角色数组,自动生成对应的联合类型,彻底避免重复编写字符串字面量:
export const roles = ["admin", "user", "moder"] as const; export type RoleType = typeof roles[number];
核心优势
- 无重复代码:不用手动重复写
"admin" | "user" | "moder",只需要维护roles数组这一处,减少人为出错的概率 - 强类型约束:
as const断言会让roles被推导为只读的字面量数组(readonly ["admin", "user", "moder"]),确保数组元素不会被意外修改 - 自动同步更新:后续新增或修改角色时,只需要调整
roles数组,RoleType会自动同步生成对应的联合类型
实际用法示例
比如在函数参数中使用RoleType做类型校验:
function assignRole(role: RoleType) { console.log(`已分配角色:${role}`); } assignRole("admin"); // 符合类型要求,正常执行 assignRole("guest"); // 类型报错,不符合预期角色范围
内容的提问来源于stack exchange,提问作者nerkn
相关产品推荐
相关产品推荐

