最近小编的团队要做一个人力资源系统,这不要用户管理的功能分配给了同事王七了,限期两天搞定,这不王七哼哧哼哧加班写代码,本来头发就不多的脑袋这两天更变得锃光发亮了。维护人员信息,首先要定义一个人员信息的数据结构,如下`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
}
```
#### **字符串枚举**