如何用TypeScript拼接两个枚举的键动态生成权限枚举?
动态生成全组合权限类型
基于现有的AppEntity和AppAction两个枚举,自动生成两者所有键的组合权限类型(例如VIEW_CUSTOMER对应值'view customer'),无需手动逐个定义,用于开发阶段的字符串类型校验。
基础枚举定义
enum AppEntity { CUSTOMER = 'customer', SUPPLIER = 'supplier', DOCUMENT = 'document' } enum AppAction { VIEW = 'view', CREATE = 'create', EDIT = 'edit', DELETE = 'delete' }
动态权限类型实现
先提取枚举的键类型,再通过类型映射生成全组合:
// 提取两个枚举的键类型 type PermissionAction = keyof typeof AppAction; type PermissionModel = keyof typeof AppEntity; // 动态生成所有权限组合的类型 export type AppPermissions = { [K in `${PermissionAction}_${PermissionModel}`]: K extends `${infer A}_${infer E}` ? A extends keyof typeof AppAction ? E extends keyof typeof AppEntity ? `${typeof AppAction[A]} ${typeof AppEntity[E]}` : never : never : never; };
功能说明
AppPermissions会自动生成AppAction和AppEntity所有键的组合(比如VIEW_CUSTOMER、CREATE_DOCUMENT等)- 每个权限键对应的类型值为枚举值的拼接字符串(例如
VIEW_CUSTOMER对应'view customer') - 开发阶段可用于校验字符串是否为合法的权限标识,避免手动维护权限列表的疏漏
内容的提问来源于stack exchange,提问作者DeltaTango
相关产品推荐
相关产品推荐

