博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Typescript学习笔记(二)枚举
阅读量:6591 次
发布时间:2019-06-24

本文共 1188 字,大约阅读时间需要 3 分钟。

 

跟随handbook的脚步,详细介绍一下枚举。

enum Direction {
Up = 1,    Down,    Left,    Right}

一个枚举类型可以包含零个或多个枚举成员,每个枚举成员可以是一个常数,也可以是计算变量。

如果没有初始化就会被当作常数,这是第一项为0,其余为前一项加一。

如果项具有ts表达式,在编译的时候就会被计算出来。比如

enum FileAccess {    // constant members    None,    Read    = 1 << 1,    Write   = 1 << 2,    ReadWrite  = Read | Write    // computed member    G = "123".length }

 

当然,反向映射是木有问题的。

enum Enum {    A}let a = Enum.A;let nameOfA = Enum[Enum.A]; // "A"

 

它被编译成:

var Enum;(function (Enum) {    Enum[Enum["A"] = 0] = "A";})(Enum || (Enum = {}));var a = Enum.A;var nameOfA = Enum[Enum.A]; // "A"

常数枚举

常数枚举是在enum关键字前使用const修饰符

const enum Enum {    A = 1,    B = A * 2}

 

你编译出来会看到js什么也没有,是的,它是在编译阶段会被删除,而且它和名字一样只能使用常数表达式。(常数枚举成员在使用的地方被内联进来。 这是因为常数枚举不可能有计算成员)。

const enum Enum {    A = 1*8,    B = A * 2}var re=Enum.A;console.log( re);

 

你会看到编译出来是

var re = 8 /* A */;console.log(re);

 

外部枚举

外部枚举就像这样,用declare关键字定义

declare enum Enum {    A = 1,    B,    C = 2}

 

引用中文book的话说:外部枚举和非外部枚举之间有一个重要的区别,在正常的枚举里,没有初始化方法的成员被当成常数成员。 对于非常数的外部枚举而言,没有初始化方法时被当做需要经过计算的。

declare enum Enum {    A = 1,    B,    C = 2}var re=Enum.A; console.log( re);

 

如上的外部枚举,编译出来为

var re = Enum.A;console.log(re);

 

转载于:https://www.cnblogs.com/dh-dh/p/5202780.html

你可能感兴趣的文章
iOS开发-清理缓存功能的实现
查看>>
IS_ERR、PTR_ERR、ERR_PTR
查看>>
html5 canvas 奇怪的形状垂直渐变
查看>>
mac java环境
查看>>
lamp 一键安装
查看>>
SQL Server 2008 收缩日志(log)文件
查看>>
UICollectionView基础
查看>>
SSAS中CUBE行权限数据级权限控制
查看>>
android学习记录(三)百度地图错误---只有一个电话显示帧,没有地图内容。
查看>>
BZOJ2794 : [Poi2012]Cloakroom
查看>>
【Eclipse】安装subclipse的Eclipse插件
查看>>
Git查看、删除、重命名远程分支和tag【转】
查看>>
浅谈IM软件业务知识——非对称加密,RSA算法,数字签名,公钥,私钥
查看>>
Oracle中REGEXP_SUBSTR及其它支持正则表达式的内置函数小结
查看>>
正确计算linux系统内存使用率
查看>>
关于MapReduce单词统计的例子:
查看>>
【php】利用php的构造函数与析构函数编写Mysql数据库查询类 (转)
查看>>
导出DLLRegisterServer接口遇到的问题
查看>>
压缩算法
查看>>
ios和android的发展前景比较
查看>>