TypeScript遍历含enum类型的成员对象数组校验指定id与权限的问题
问题根源
你使用的是TypeScript默认的数字枚举类型,PermissionsEnum.projectAdmin的实际取值是数字0,但接口返回的permissions对象的键是字符串"projectAdmin",二者类型不匹配,因此通过枚举值访问属性时会返回undefined。
解决方案
有两种常用修复方式:
- 方案1:修改枚举为字符串枚举(更推荐,可彻底避免类似类型不匹配问题)
将PermissionsEnum的定义修改为显式赋值的字符串枚举:
之后校验逻辑可直接简化为:export enum PermissionsEnum { projectAdmin = 'projectAdmin', projectEdit = 'projectEdit', projectView = 'projectView' }return !!this.memberships?.find((membership) => membership.id === 'xyz' && membership.permissions[PermissionsEnum.projectAdmin] ); - 方案2:不修改枚举定义,通过反向映射取枚举的字符串键名
数字枚举支持反向映射,可以通过PermissionsEnum[枚举值]拿到对应的字符串键名,修改校验逻辑即可:return !!this.memberships?.find((membership) => membership.id === 'xyz' && membership.permissions[PermissionsEnum[PermissionsEnum.projectAdmin] as keyof typeof PermissionsEnum] );
内容的提问来源于stack exchange,提问作者user16831793
相关产品推荐
相关产品推荐

