4.扩展类型-枚举

扩展类型-枚举

扩展类型:类型别名、枚举、接口、类

枚举通常用于约束某个变量的取值范围。

字面量类型和联合类型配合使用,也可以达到同样的目标。

字面量类型的问题

  • 在类型约束位置,会产生重复代码。可以使用类型别名解决该问题。
  • 逻辑含义和真实的值产生了混淆,会导致当修改真实值的时候,产生大量的修改。
  • 字面量类型不会进入到编译结果

枚举

enum Gender{
    male = "男",
    female = "女"
}


let gender: Gender;
<!--  gender赋值的是逻辑名称 取的是真实值 -->
gender = Gender.male;
gender = Gender.female;


function prontGenders() {
    const vals = Object.values(Gender);
    vals.forEach => console.log(v);
}

如果逻辑名变了可以使用f2进行重构

枚举会出现在编译结果中,表现为对象

  • 枚举 的属性值 为数字 或 字符串
  • 数字枚举(数字)的值会自动自增
enum Level {
 level1: 1,   // 1
 level2,      // 2
 level3,      // 3
}

enum Level {
 level1,   // 0
 level2,   // 1
 level3,   // 2
}

  • 被数字枚举约束的变量可以直接赋值为数字

最佳实践:

  • 尽量不要在一个枚举中既出现字符串字段,又出现数字字段
  • 使用枚举时,尽量使用枚举字段的名称,而不使用真实的值
function getUsers(lev: Level) {
    
}
getUsers(Level.level2);

扩展知识:位枚举(枚举的位运算)

针对的数字枚举

位运算: 两个数字换算成二进制后进行的运算


enum Permission {
    Read = 1,  //  0001
    Write = 2,  // 0010
    Create = 4,  // 0100
    Delete = 8 // 1000
}
// 1.如何组合权限
// 使用或运算
// 0001
// 或
// 0010
// 0011
let p = Permission.Read | Permission.Write;

// 2. 如何判断是否拥有某个判断
// 0011
// 且
// 0010
// 0010
function hasPermission(target: Permission, per: Permission) {
    return (target & per) === per;
}

console.log(hasPermission(p, Permission.Read));

// 3.如何删除某个权限
// 0011
// 异或
// 0010
// 0001
p = p^Permission.Write;
console.log(hasPermission(p, Permission.Write));
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值