最近小編的團隊要做一個人力資源系統,這不要用戶管理的功能分配給了同事王七了,限期兩天搞定,這不王七哼哧哼哧加班寫代碼,本來頭發就不多的腦袋這兩天更變得锃光發亮了。維護人員信息,首先要定義一個人員信息的數據結構,如下`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
}
```
#### **字符串枚舉**