一个js判断角色的例子
function initRole(role){
if(role === 1 || role ===2){
// do sth
} else if(role === 3 || role == = 4){
// do sth
} else {
// do sth
}
}
此方法来判断角色的权限来做一些不同的操作,但有两个问题。
- 可读性差,你得记住每个数字代表角色
- 可维护性差,硬编码,牵一发动全身。
ts中的枚举类型,就可以比较好的解决这一问题。
数字枚举
enum Role {
user, // user = 1
admin,
superAdmin,
owner
}
console.log(Role.user)
console.log(Role)
也可以给枚举类型赋上初始值。如上面 user =1 , 后面的值就会跟着排序。
字符串枚举
// 字符串枚举
enum Message {
Success = '成功了',
Fail = '失败了'
}
console.log(Message.Success)
console.log(Message)
字符串枚举不会反向映射,因此得不到数字。
异构枚举
// 异构枚举Y
enum Any {
x,
y = 'yes'
}
console.log(Any.x)
console.log(Any)
但是这里容易产生混淆,所以不建议使用。
枚举成员
枚举成员的值,是不允许修改的,如图显示,他是只读属性。
其中成员又分为 常量成员 和 需要被计算的成员(即非常量的表达式,他不会在编译阶段运算,而是在执行阶段运算),同时在computed后面的成员,必须得赋初始值,不然会如上图报错。
常量枚举
用const声明的枚举,就是常量枚举,特性是在编译阶段会被移除。
// 常量枚举
const enum Month {
Jan,
Feb,
Mar
}
let month = [Month.Jan, Month.Feb, Month.Mar]
console.log(month)
作用是 当我们不需要一个对象,而需要一个对象的值的时候,就可以用常量枚举。这样可以减少我们在编译环境时的代码。
用枚举来写第一个例子
enum Role {
user = 1,
admin,
superAdmin,
owner
}
function initRole(role:number){
if(role === Role.user || role === Role.admin){
// do sth
} else if(role === Role.superAdmin || role === Role.owner){
// do sth
} else {
// do sth
}
}
initRole(1)