1.首先看一个官网的例子
enum Color {Red, Green, Blue}
let c: Color = Color.Green;
console.log(c) // 1
enum Color {Red = 1, Green, Blue}
let c: Color = Color.Green;
console.log(c) // 2
enum Color {Red, Green=3, Blue}
let a: Color = Color.Red;
let b: Color = Color.Green;
let c: Color = Color.Blue;
console.log(a, b, c) // 0, 3, 4
上面的例子,默认情况下,从从0开始为元素编号,然后递增。
(1)所以上面的第一个c就是1
(2)也可以手动的指定成员的数值,那么这个枚举值就是所赋的值,后面枚举项的值就是从它紧邻前面哪个枚举值递增1理解这句话上面的第二个c就是2
(3)通过(2)中规则,看下第三个a=0(默认的0)、b=3(手动赋的值)、c=4(后面枚举项的值就是从它紧邻前面哪个枚举值递增1)
重点:上面的规律只适合number
2.如果是字符串:
enum Color {
number1,
number2,
Red = 'red',
Green = 'green',
blue = 'blue',
}
console.log(Color.number1,Color.number2,Color.Red) // 0,1,red,bule
前面两个输出是0,1,这是默认值,后面两个的是手动赋值。
再看下面这种情况
enum Color {Pul, Red = 'red', Green='green', num} // 提示错误
console.log(Color.Pul, Color.Green, Color.num); // 0,green,undefined
enum Color {Pul, Red = 'red', Green='green', num1=1, num2=2} // success
console.log(Color.Pul, Color.Green, Color.num1, Color.num2); // 0,green,1,2
从上面可以看出如果如果没有手动赋值的紧邻前面的那个值,是字符串,ts中会提示错误,但是即使枚举中即使有字符串,但是紧邻前面那个枚举值是number,这个没手动赋值的值会是前面紧邻那个枚举值递增1
3.再看
const getNumnber = ():number => {
return 1;
}
enum Color {sn,blue=getNumnber(),sn1} // error
enum Color {sn,blue=getNumnber(),sn1=1,sn2} // success
如果是有函数的话,和上面的字符串那个类似
4.再看
const getNumnber = ():number => {
return 1;
}
enum Color {sn,blue=getNumnber(),red='red'}// error
这个会error是因为,如果有enum中字符串,就不能使用函数赋值