3.typescript的数据类型-枚举(enum)

1.枚举初识

默认情况下,枚举是从0开始的,后面的值依次递增,它们当中的每个值都可以显示指定,只要不出现重复即可,没有被显示指定的值,会以前一个值为基础递增得到

enum Color {
	red,
	yellow,
	green
}
let c: Color = Color.red // 1
let str:string = Color[1] // yellow,这个写法不太友好
let str1:string = Color[Color.green] // green,推荐使用
console.log(Color['red'] === 0) //true
console.log(Color['yellow'] === 1) //true
console.log(Color[0] === 'red') //true
console.log(Color[1] === 'yellow') //true
  • 以上代码对应的js代码为
var Color;
(function (Color) {
    Color[Color["red"] = 0] = "red";
    Color[Color["blue"] = 1] = "blue";
    Color[Color["green"] = 2] = "green";
})(Color || (Color = {}));
2.常量枚举

常数枚举与普通枚举的区别是,它会在编译阶段被删除,并且不能包含计算成员,假如包含了计算成员,则会在编译阶段报错

const enum Color {
	red,
	yellow,
	green
}
let str:Color = Color.yellow

编译后的js代码为

var str = 1

为什么编译后的js代码只剩一行了呢?

  • 直接内联此枚举项的值
  • 不再为常量枚举类型生成对应的js代码

我们还需要注意的是:常量枚举不能使用Color[1]或者Color[Color.red]这样的语法来获取枚举项字符串名称了,因为常量枚举没有生成对应枚举项的代码

3.枚举项默认值

1.首个枚举项的默认值设置为1,为什么呢?

我们都知道首个枚举项的默认值是0,但是在js中0代表false,如果想要判断某个枚举值是否存在,难道我们每次都要先判断是不是typeof (Color.red) === 'undefined’吗?为了避免这种情况,我们把首个枚举项设置为1,然后后续的枚举项以1为基础递增,消除了0的情况

enum Color {
	red = 1,
	yellow,
	green
}

2.不建议为枚举项设置字符串数据类型

enum Color {
	red,
	green,
	blue = 'blue color'
}

编译后的js代码为

var Color;
(function (Color) {
    Color[Color["red"] = 0] = "red";
    Color[Color["green"] = 1] = "green";
    Color["blue"] = "blue color";
})(Color || (Color = {}));

会发现,我们不能使用Color[Color.blue]来获取枚举项的对应的名称了

如果我们这样写

enum Color {
	red,
	green = 'green color',
	blue // error: Enum member must have initializer
}

ts会直接报错,因为green后续的枚举项无法根据’green color’这个字符串进行递增

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值