03-TypeScript学习之枚举类型

字面量类型的问题

  • 在类型约束位置 会产生重复代码 可以使用类型别名解决该问题
let Gender = "男" | "女";
let user1Gender = "男";
let user2Gender = "女";
function getUserGender(g: Gender):[]{
     return [];
}
  • 当字面量类型的值发生修改时 所有赋值给变量的字面量类型都需要修改
let Gender = "男" | "女"; // 修改成 "male" | "female"时 下面所有对变量的赋值都需要修改
let user1Gender:Gender = "男";
let user2Gender:Gender = "女";
  • 字面量类型不会进入到编译结果 无法获取到字面量类型的所有值

扩展类型-枚举

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

枚举通常用于约束某个变量的取值范围(字面量 + 联合类型也可以达到相同的效果)

如何定义一个枚举

enum 枚举的名称{
     枚举字段1 = 值1,
     枚举字段2 = 值2
}

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

枚举的规则:

  • 枚举的字段值可以是字符串或者数字,分别称为字符串枚举、数字枚举

  • 数字枚举的值会自动自增

enum Level {
     level1 = 1,
     level2 = 2,
     level3 = 3
}
// 如果level2 不赋值 默认为2 
// 如果level1 不赋值 默认为0
  • 被数字枚举约束的变量 可以直接赋值为数字
enum Level {
     level1 = 1,
     level2 = 2,
     level3 = '222'
}
let l:Level = 1; // 不报错
let L:Level = '222' // 不行
  • 数字枚举的编译结果 和 字符串枚举的编译结果有差异
// TypeScript定义的枚举类型
enum Level {
     level1 = 1,
     level2 = 2,
     level3 = '222'
}
// 编译结果
var Level = {
     "level1":1,
     "level2":2,
     "level3":'222',
     "1":"level1",
     "2":"level2"
}

最佳实践

尽量不要在一个枚举中既出现字符串类型 又出现数字类型

使用枚举时 尽量使用枚举字段的名称 不要使用真实名称

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

  • 针对数字类型

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

enum Permission{
    Read = 1,   // 2^0 => 0001
    Write = 2,  // 2^1 => 0010
    Create = 4, // 2^2 => 0100
    Delete = 8  // 2^3 => 1000
}

// 如何组合某种权限 |运算 存在1 取1
let p:Permission = Permission.Read | Permission.Write;

/**如何判断是否拥有某种权限
 * &运算 相同取1
 * @param {Permission} target 需要判断的目标权限值
 * @param {Permission} per    枚举类型中的值
 * @return {boolean} 
 */
function hasPermission(target:Permission, per:Permission): boolean{
    return (target & per) === per
}
let result  = hasPermission(p, Permission.Read);
console.log(result)

// 如何删除某个权限 ^(异或)运算 相同取0 不同取1
p = Permission.Read ^ p;
console.log(hasPermission(p, Permission.Read))
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值