多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
最近小编的团队要做一个人力资源系统,这不要用户管理的功能分配给了同事王七了,限期两天搞定,这不王七哼哧哼哧加班写代码,本来头发就不多的脑袋这两天更变得锃光发亮了。维护人员信息,首先要定义一个人员信息的数据结构,如下`interface`所示 ```javascript interface IUser { name: string, age: number, birthday: Date, mobile: string, // 角色 0 管理员, 1: 超级管理员 2: 普通员工 role: [0,1,2] } // 新增 function add(user: IUser): void { } // 编辑 function edit(user: IUser): void { } ``` 基本功能刚写的差不多了,王七看了看表,晚上九点半,约女神是不可能了,还能回家撸一把游戏。突然产品经理提着菜刀过来了,要求王七根据人员角色不同显示不同的按钮。王七看着反光的菜刀里面的自己,哎,继续干活吧 ```javascript // 按钮数组 let buttons if(user.role === 0) { buttons = ['A', 'B'] } else if(user.role === 2) { buttons = ['B', 'C'] } else { buttons = ['E'] } ``` 上面这段代码中的魔数,对于不熟悉用户信息的人来说,看到上面的0,1,2,绝对是一脸懵,代码review也过不了关。这时候王七突然就想到了可以通过枚举来解决 ### **数字枚举** ```javascript // 定义性别枚举 enum Role{ ADMIN = 0, SUPER_ADMIN = 1, USER = 2 } // 修改接口 interface IUser{ // 其他省略 // 设置性别为性别枚举 role: Role } // 获取按钮 let buttons if(user.role === Role.ADMIN) { buttons = ['A', 'B'] } else if(user.role === Role.SUPER_ADMIN) { buttons = ['B', 'C'] } else { buttons = ['E'] } ``` 如上定义的枚举,在ts枚举中属于数字枚举,其中`ADMIN`的值为0,`SUPER_ADMIN`的值为1,`USER`的值为2,对于数字枚举,也可以不用指定值 ``` enum Role{ ADMIN, SUPER_ADMIN, USER } ``` 如果枚举没有指定值,那么初始化以数字0开始,后面的值按照索引逐次加1,如上`ADMIN`的值为0,`SUPER_ADMIN`的值为1,`USER`的值为2。 枚举也可以只指定部分值的初始值,其他的值会按照上述的规则逐次加1,如下例 ```javascript enum Color { RED = 1, // 值为 2 GREEN, BLUE = 5, // 值为6 GREY } ``` #### **字符串枚举**