一,前言
1.enum
是在typescript
中新增的合法类型,是对JavaScript
标准数据类型的一个补充。
2.enum
的主要作用是可以为一组限定范围内数值赋予友好的名字。
二,enum
介绍
1.enmu
的基本形式如下
enum Animals {
Dog,
Cat,
Pig,
}
2.根据值和定义形式主要可以分为三种类型:数字枚举,字符串枚举,常量枚举
三,数字枚举
1.枚举值为数字的为数字枚举
enum Animals {
Dog=1,
Cat=2,
Pig=3,
}
2.默认情况下,若不手动为枚举成员赋值,则会被定义成数字枚举,且从编号0
开始递增为枚举成员赋值
enum Animals {
Dog,
Cat,
Pig,
}
console.log(Animals.Dog) //0
console.log(Animals.Cat) //1
console.log(Animals.Pig) //2
3.我们可以为其中的一个或多个手动赋值,之后的顺位按赋值的数值递增
enum Animals {
Dog,
Cow=5,
Cat=2,
Pig,
}
console.log(Animals.Dog) //0
console.log(Animals.Cow) //5
console.log(Animals.Cat) //2
console.log(Animals.Pig) //3
4.枚举项有两种类型:常数项和计算所得项,前面所说的都是常数项,需要注意的是,当其中一项为计算所得项时,那么它的下位一定要赋予初始值,否则会报错,由于使用计算所得项,自动计算下位失效了。
enum Animals {
Dog,
Cow=Math.random(), //Cow为常数项
Cat=2, //下一位需要赋予初始值,否则会报错
Pig,
}
二,字符串枚举
1.枚举值为字符串的为字符串枚举
enum Animals {
Dog="dog",
Cat="cat",
Pig="pig",
}
2.字符串枚举值要求每个字段的值都必须是字符串字面量,不能使用计算所得项
三,常数枚举
1.使用const enmu
创建的枚举为常数枚举
const enum Animals {
Dog="dog",
Cat="cat",
Pig="pig",
}
2.常数枚举和普通枚举的区别就是常数枚举本身会在编译的时候被删除,只会在使用到的地方,拿到相应的值进行替换。
四,反向映射
1.当我们定义了枚举可以使用enmu.key
或者enmu[key]
来获取值
const enum Animals {
Dog="dog",
Cat="cat",
Pig="pig",
}
console.log(Animals["Dog"]) //dog
console.log(Animals.Cat) //cat
2.不仅如此我们可以根据值来获取枚举项的key
const enum Animals {
Dog,
Cat,
Pig,
}
console.log(Animals[0]) //Dog
console.log(Animals[2]) //Pig
五,枚举类型
1.枚举本身和枚举成员可以作为一种类型来声明变量
enum Animals {
Dog,
Cat,
Pig,
}
let test:Animals = Animals.Dog //枚举本身作为类型,只能赋值枚举里的枚举项
let test:Animals = 12 //声明了是Animals类型,赋值其他值会报错
let test:Animals.Dog = Animals.Dog //枚举成员作为类型,只能赋值相应的枚举值
let test:Animals.Dog = Animals.Cat //报错