阅读 554

TypeScript中的枚举(typescript enum)

枚举(Enum)类型用于取值被限定在一定范围内的场景,比如一周只能有七天从周一到周日,三原色红绿蓝,四个方位上下左右等。

用途:

使用枚举我们可以定义一些有名字的数字常量。 枚举通过enum关键字来定义。

数字枚举

示例:

enum Direction{     Up,     Down,     Left,     Right, } console.log(Direction.Up); 复制代码

使用ts-node命令调用我们的程序

运行结果:

在这里枚举成员会被赋值为从 0 开始递增的数字。这个例子中UP就是0,Down是1,到Right为3

同时也会对枚举值到枚举名进行反向映射:

示例:

enum Direction{     Up,     Down,     Left,     Right, } console.log(Direction[0]); 复制代码

运行结果:

实现反向映射的原理:

首先我们查看编译后的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 = {})); console.log(Direction.Down); console.log(Direction[0]); 复制代码

首先他声明了一个作用域Direction

然后Direction["Up"] = 0会将Direction里的Up赋值为0因为JavaScript中赋值运算符返回的值是被赋予的这个值所以Direction["Up"] = 0返回0,因此 Direction[Direction["Up"] = 0] = "Up";就应该看作Direction[0] = "Up";这样就实现了一个双向赋值的过程。

手动赋值

我们也可以给枚举项手动赋值:

enum Direction{     Up=10,     Down,     Left,     Right, } console.log(Direction.Up); 复制代码

上面的例子中,未手动赋值的枚举项会接着上一个枚举项递增。

运行结果:

字符串枚举

示例:

enum Direction{     Up = 'Up',     Down = 'DOWN',     Left = 'LEFT',     Right = 'RIGHT', } 复制代码

用途我们可以做一个简单的字符串比较:

enum Direction{     Up = 'UP',     Down = 'DOWN',     Left = 'LEFT',     Right = 'RIGHT', } const value = 'UP' if(value === Direction.Up){     console.log('go up!');      } 复制代码

运行结果:

常量枚举(常数枚举)

常数枚举是使用 const enum 定义的枚举类型:

const enum Direction{     Up = 'UP',     Down = 'DOWN',     Left = 'LEFT',     Right = 'RIGHT', } const value = 'UP' if(value === Direction.Up){     console.log('go up!');      } 复制代码

常量枚举与普通枚举的区别是,它会在编译阶段被删除,并且不能包含计算成员。

编译后代码:

var value = 'UP'; if (value === "UP" /* Up */) {     console.log('go up!'); } 复制代码

注意:只有常量值可以使用常量枚举,如果包含了计算值会报错

示例:

const enum Direction{     Up ,     Down,     Left,     Right = 'RIGHT'.length, } 复制代码

报错信息:

拓展

我们在数字枚举中使用ts-node命令掉用程序需要先安装ts-node, 安装它的原因是typescript自带的tsc命令并不能直接运行typescript代码。但值得注意的是 ts-node 并不等于 typescript 的 Node.js ,仅仅封装了 typescript 的编译过程,提供直接运行typescript代码的能力。

全局安装命令:

npm install -g ts-node


作者:莫笑沉吟
链接:https://juejin.cn/post/7032940254919131173

文章分类
代码人生
文章标签
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐