// 声明d为枚举类型Direction let d: Direction;
类型可分为:
数值枚举
当我们声明枚举类型时,虽然没有给出形参,但它们的值显然是默认的数值类型,并且默认是从0开始依次累加:
enum Direction { Up, // 值默认为 0 Down, // 值默认为 1 Left, // 值默认为 2 Right // 值默认为 3 } console.log(Direction.Up === 0); // true console.log(Direction.Down === 1); // true console.log(Direction.Left === 2); // true console.log(Direction.Right === 3); // true
如果我们使用第一个值作为形参,后面的值也会根据前一个值加1:
enum Direction { Up = 10, Down, Left, Right } console.log(Direction.Up, Direction.Down, Direction.Left, Direction.Right); // 10 11 12 13
字符串枚举
虽然枚举类型的值也可以是字符串类型:
enum Direction { Up = 'Up', Down = 'Down', Left = 'Left', Right = 'Right' } console.log(Direction['Right'], Direction.Up); // Right Up
如果一个变量设置为字符串,后面的数组也需要形参字符串,否则会报错:
enum Direction { Up = 'UP', Down, // error TS1061: Enum member must have initializer Left, // error TS1061: Enum member must have initializer Right // error TS1061: Enum member must have initializer }
异构枚举
也就是说,将数字枚举和字符串枚举结合起来,混合在一起,如下:
enum BooleanLikeHeterogeneousEnum { No = 0, Yes = "YES", }
通常我们很少使用异构枚举
自然
现在一个枚举案例如下:
enum Direction { Up, Down, Left, Right }
编译后的javascript如下:
var Direction; (function (Direction) { Direction[Direction["Up"] = 0] = "Up"; Direction[Direction["Down"] = 1] = "Down"; Direction[Direction["Left"] = 2] = "Left"; Direction[Direction["Right"] = 3] = "Right"; })(Direction || (Direction = {}));
从上面的代码可以看出typescript 强制类型,Direction[Direction["Up"] = 0] = "Up" 可以分为
所以定义了枚举类型后,可以通过正负映射得到对应的值,如下:
enum Direction { Up, Down, Left, Right } console.log(Direction.Up === 0); // true console.log(Direction[0]); // Up
并且在多个地方定义的枚举可以合并typescript 强制类型,如下:
enum Direction { Up = 'Up', Down = 'Down', Left = 'Left', Right = 'Right' } enum Direction { Center = 1 }
编译后js代码如下:
var Direction; (function (Direction) { Direction["Up"] = "Up"; Direction["Down"] = "Down"; Direction["Left"] = "Left"; Direction["Right"] = "Right"; })(Direction || (Direction = {})); (function (Direction) { Direction[Direction["Center"] = 1] = "Center"; })(Direction || (Direction = {}));
可以看到,Direction对象属性是叠加的
3、应用场景
以获取生命为例,后端返回的数组使用0-6来标记对应的日期。 这时可以使用枚举来增强代码的可读性,如下:
enum Days {Sun, Mon, Tue, Wed, Thu, Fri, Sat}; console.log(Days["Sun"] === 0); // true console.log(Days["Mon"] === 1); // true console.log(Days["Tue"] === 2); // true console.log(Days["Sat"] === 6); // true
包括前端日常返回0、1等状态时,我们可以通过枚举来定义,这样可以增强代码的可读性,方便后续维护
参考
%E6%9E%9A%E4%B8%BE
总结
关于TypeScript中枚举类型的理解和应用场景这篇文章就到此结束了。 关于TypeScript枚举类型的更多信息,请搜索自学编程网之前的文章或者继续浏览下面的相关文章。 希望你以后能学到更多。 支持网络自学编程!
发表评论