enum类型是对JavaScript标准数据类型的一个补充。

在运行环境下编译成对象, 可用属性名索引, 也可用属性值索引。而其实现原理为:反向映射 (如下例)
 
  • 数字枚举

enum Role {
Reporter, // Reporter = 1, 默认情况下,从0开始为元素编号。 也可赋值,后续值递增
Developer,
Maintainer,
Owner,
Guest
}

编译准成为如下:

var Role;
(function (Role) {
Role[Role["Reporter"] = 0] = "Reporter";
Role[Role["Developer"] = 1] = "Developer";
Role[Role["Maintainer"] = 2] = "Maintainer";
Role[Role["Owner"] = 3] = "Owner";
Role[Role["Guest"] = 4] = "Guest";
})(Role || (Role = {}));
  • 字符串枚举 :

    只有成员的名称被当作的key,未作反向映射
enum Message {
Success = '成功!',
Fail = '失败!'
}

编译准成为如下:

var Message;
(function (Message) {
Message["Success"] = "\u6210\u529F\uFF01";
Message["Fail"] = "\u5931\u8D25\uFF01";
})(Message || (Message = {}));
  • 异构枚举 :

可以混合字符串和数字成员

enum Answer {
N,
Y = 'Yes'
}
// 编译结果如下:
var Answer;
(function (Answer) {
Answer[Answer["N"] = 0] = "N";
Answer["Y"] = "Yes";
})(Answer || (Answer = {}));
  • 枚举成员(只读的状态):

    分为 常量成员计算成员

enum Char {
// const member 为未初始化/对已有枚举成员的引用/常量表达式 (在编译时计算出结果,然后以常量的形式出现在运行环境
a,
b = Char.a,
c = 1 + 3,
// compute member 不会在编译阶段进行计算,而会保留到程序的执行阶段
d = Math.random(),
e = '123'.length,
}
编译后==》
var Char;
(function (Char) {
// const member 为未初始化/对已有枚举成员的引用/常量表达式 (在编译时计算出结果,然后以常量的形式出现在运行环境
Char[Char["a"] = 0] = "a";
Char[Char["b"] = 0] = "b";
Char[Char["c"] = 4] = "c";
// compute member 不会在编译阶段进行计算,而会保留到程序的执行阶段
Char[Char["d"] = Math.random()] = "d";
Char[Char["e"] = '123'.length] = "e";
})(Char || (Char = {})); Char.a = 2 // Cannot assign to 'a' because it is a read-only property (只读状态)
  • 常量枚举 :

用const定义的枚举为常量枚举,会在编译阶段被移除

场景:当不需要一个对象,而只需要对象的值时,可使用常量枚举。会减少在编译环境上的代码

const enum Month {
Jan,
Feb,
Mar
}
let month = [Month.Jan, Month.Feb, Month.Mar]
编译后==》
var month = [0 /* Jan */, 1 /* Feb */, 2 /* Mar */];
  • 枚举类型:

在某种情况下,枚举和枚举成员都可以作为一种单独的类型存在(枚举成员没有初始值 / 所有成员都为数字枚举 / 所有成员均为字符串枚举)

enum E { a, b }
enum F { a = 0, b = 1 }
enum G { a = 'apple', b = 'banana'} let e: E = 3
let f: F = 3
e === f This condition will always return 'false' since the types 'E' and 'F' have no overlap// 两种不同种类的枚举是无法比较的 let e1: E.a = 1
let e2: E.b = 2
// e1 === e2 同上
let e3: E.a = 3
e1 === e3 // 相同枚举成员类型,即可比较 let g1: G = G.a | G.b // 字符串枚举 取值只能是 枚举成员的类型
let g2: G.a = G.a // 只能为G.a

TypeScript——枚举类型的更多相关文章

  1. typescript枚举,类型推论,类型兼容性,高级类型,Symbols(学习笔记非干货)

    枚举部分 Enumeration part 使用枚举我们可以定义一些有名字的数字常量. 枚举通过 enum关键字来定义. Using enumerations, we can define some ...

  2. TypeScript中的枚举类型

    TypeScript拓展了Javascript原生的标准数据类型集,增加了枚举类型(enmu)和其他语言一 样 它提供我们一种数字类型的值,用来设置由于辨别的名字和方法 enum Students { ...

  3. TypeScript 中枚举类型的理解?应用场景?

    一.是什么 枚举是一个被命名的整型常数的集合,用于声明一组命名的常数,当一个变量有几种可能的取值时,可以将它定义为枚举类型 通俗来说,枚举就是一个对象的所有可能取值的集合 在日常生活中也很常见,例如表 ...

  4. TypeScript 之类型判断

    在使用 Angular 做项目的时候,对 TypeScript 的类型判断不太熟练,为了方便查找,特意对 TypeScript 的类型判断做了简单梳理.文章只是 TS 官网的内容摘要,没有高深的知识, ...

  5. TypeScript基础类型,类实例和函数类型声明

    TypeScript(TS)是微软研发的编程语言,是JavaScript的超集,也就是在JavaScript的基础上添加了一些特性.其中之一就是类型声明. 一.基础类型 TS的基础类型有 Boolea ...

  6. TypeScript 基本类型(一)

    1.boolean 布尔值 true/false let isDone: boolean = false; 2.number 数字:和JavaScript 一样,TypeScript 里的所有数字都是 ...

  7. TypeScript 高级类型

    ⒈交叉类型(Intersection Types) 交叉类型是将多个类型合并为一个类型. 这让我们可以把现有的多种类型叠加到一起成为一种类型,它包含了所需的所有类型的特性. 例如, Person &a ...

  8. TypeScript 枚举

    我们常常会有这样的场景,比如与后端开发约定订单的状态开始是0,未结账是1,运输中是2,运输完成是3,已收货是4.这样的纯数字会使得代码缺乏可读性.枚举就用于这样的场景.枚举可以让我们定义一些名字有意义 ...

  9. TypeScript的类型

    ⒈TypeScript的类型 JavaScript语言的数据类型包括以下7种: 1.boolean(布尔),true || false 2.null,表明null值得特殊关键字,JavaScript是 ...

随机推荐

  1. 使用总结:java多线程总结 <转载>

    转载 https://www.cnblogs.com/rollenholt/archive/2011/08/28/2156357.html java多线程总结 2011-08-28 20:08  Ro ...

  2. Mac的VIM中delete键失效的原因和解决方案

    在Mac的键盘上实际是没有backspace这个键的.其实Mac的delete就是Windows的backspace,实现的都是向左删除的功能.Mac上如果要实现向右删除的功能需要使用⌘+delete ...

  3. leetcode844 Backspace String Compare

    """ Given two strings S and T, return if they are equal when both are typed into empt ...

  4. Centos7 静默安装 Oracle11G

    1.准备安装包: 安装包官网下载地址:https://www.oracle.com/technetwork/database/enterprise-edition/downloads/112010-l ...

  5. hostPath Volume【转】

    hostPath Volume 的作用是将 Docker Host 文件系统中已经存在的目录 mount 给 Pod 的容器.大部分应用都不会使用 hostPath Volume,因为这实际上增加了 ...

  6. 读《Adaptive Thresholding Using the Integral Image》自适应图像阈值

    图像的二值化问题总是一个问题.虽然使用深度学习的方法取得了不小的进展,但是传统的方法还是值得借鉴. 刚好随机游走到这篇文章 挖个07年的坟  地址:http://people.scs.carleton ...

  7. Day5-T2

    原题目 根据社会学研究表明,人们都喜欢和自己身高相近的人做朋友. 现在有 N 名身高各不相同的同学依次走进教室. 调查人员想预测每个人在走入教室的瞬间最想和 已经在教室的哪个人做朋友.当有两名同学和这 ...

  8. phpMydmin的GetShell思路

    phpMyadmin简介 phpMyadmin是一个以PHP为基础的MySQL数据库管理工具,使网站管理员可通过Web接口管理数据库 . 信息收集 此部分主要需要收集的是网站物理路径,否则后续无法通过 ...

  9. 015.Oracle数据库,取本月月初,取本月月末

    /*取本月月初,取本月月末*/ SELECT trunc( SYSDATE, 'mm' ) AS 月初 , last_day(trunc(sysdate)) AS 月末 FROM dual; 修改如下 ...

  10. System.Data.SqlClient.SqlException: 'Incorrect syntax near 'OFFSET'.

    https://www.nopcommerce.com/boards/t/54586/410-not-running-on-local-system.aspx#209684 Hello, I was ...