TypeScript 数据类型---枚举 (Enum)
一、基础用法
1.默认值
从0开始递增+1
enum Color {Red, Green, Blue}
let c: Color = Color.Red;
let d: Color = Color.Green;
let e: Color = Color.Blue;
console.log('enum',c,d,e) //0,1,2
2.手动设置初始值
第一位未设置的默认0,后面递增.遇到有初始值的,后面的按照初始值+1.
enum Color {Red, Green=2, Blue}
let c: Color = Color.Red;
let d: Color = Color.Green;
let e: Color = Color.Blue;
console.log('enum',c,d,e) //0,2,3
enum Color {Red, Green=2, Blue,Yellow=7 ,Dark}
let c: Color = Color.Red;
let d: Color = Color.Green;
let e: Color = Color.Blue;
let f: Color = Color.Yellow;
let g: Color = Color.Dark;
console.log('enum',c,d,e,f,g) //0 2 3 7 8
3.属性获取
在赋予初始值的时候是以键值对的形式给的,那怎么拿到'键'呢?
enum Color {Red, Green=2, Blue,Yellow=7 ,Dark}
let c1: string = Color[0];
let c: Color = Color.Red;
let d1: string = Color[1];
let d: Color = Color.Green;
let e1: string = Color[2];
let e: Color = Color.Blue;
let f1: string = Color[3];
let f: Color = Color.Yellow;
let g1: string = Color[4];
let g: Color = Color.Dark;
console.log('enum',c1,c,d1,d,e1,e,f1,f,g1,g) //Red 0 undefined 2 Green 3 Blue 7 undefined 8
奇怪的是,为啥会有undefined.这里大胆猜测一下这里的索引,即[0]这里面的0代表的是键所对应的值,因为没有一个键的值是1或者4,所以[1],[4]是undefinend.验证一下
let test: string = Color[8]; //Dark
至少目前看来确实是这样的,属性获取时按照属性对应的值来获取的.
4.设置初始值为字符串
假如设置的字符串不是最后一位,那后面的属性将无法设置默认值.我们之前说过要递增+1,如果前一个是字符串,ts将无法处理初始化.

enum Color {Red, Green=2, Blue,Yellow='b' ,Dark='b'}
let g: Color = Color.Dark;
let test: string = Color['b'];
console.log('enum',g,test) //b undefined
同时我们,发现,并不能用字符串值拿到键位值,那么怎么拿到呢?经过查询资料得知,字符串赋值之后不进行反向映射.故拿不到对应键位值.
5.设置初始值为表达式(其他)

基本是只要能拿到数值的表达式都可以,但是只要有一个字符串即使它在最后一个,也不能用表达值

总结一下:枚举成员可以是纯数值,纯字符串,混合三种情况.涉及字符串混合的限制条件比较多,所以尽量避免字符串的混合.
二、翻译结果
要想明白枚举的用法,最直接的方式就是看翻译成js后的代码.以默认值为例子
ts
enum Color {Red, Green, Pink, Blue,Yellow ,Dark}
let g: Color = Color.Dark;
let h: string = Color[5]
js
var Color;
(function (Color) {
Color[Color["Red"] = 0] = "Red";
Color[Color["Green"] = 1] = "Green";
Color[Color["Pink"] = 2] = "Pink";
Color[Color["Blue"] = 3] = "Blue";
Color[Color["Yellow"] = 4] = "Yellow";
Color[Color["Dark"] = 5] = "Dark";
})(Color || (Color = {}));
var g = Color.Dark;
var h = Color[5];
就拿第一个"Red"为例,先是声明了一个变量Color,然后Color["Red"]=0,也就是说给Color新增了一个"Red"属性,并且值为0.然后Color[0]="Red",同时Color新增了一个'0'索引,其对应值为Red.
那其他情况呢?
字符串
ts
enum Color {Red, Green, Pink=7, Blue,Yellow ,Dark=''}
let g: Color = Color.Dark;
let h: string = Color[5]
js
var Color;
(function (Color) {
Color[Color["Red"] = 0] = "Red";
Color[Color["Green"] = 1] = "Green";
Color[Color["Pink"] = 7] = "Pink";
Color[Color["Blue"] = 8] = "Blue";
Color[Color["Yellow"] = 9] = "Yellow";
Color["Dark"] = "";
})(Color || (Color = {}));
var g = Color.Dark;
var h = Color[5];
所以必须跟js的数组区分开来,他们的索引并不是按位置排列的.而是初始值.
总结:1.添加的索引为赋予的值,没有就是默认值.2.字符串并没有添加索引,所以无法根据值获得键.
TypeScript 数据类型---枚举 (Enum)的更多相关文章
- mysql数据类型——枚举enum(‘F’,'M')
ENUM(“value1”,“value2”,...) 说明:枚举,列值可赋予值列表中的某个成员 允许的属性:除通用属性外无其他属性 缺省值:如果列可为NULL,则为NULL:如果列为NOTNULL, ...
- TypeScript入门七:TypeScript的枚举
关于枚举 数字枚举 字符串枚举 异构枚举 计算的和常量成员 运行时的枚举与反向映射 常量枚举与外部枚举 一.关于枚举 枚举:一个集的枚举是列出某些有穷序列集的所有成员的程序,或者是一种特定类型对象的计 ...
- 前端枚举enum的应用(Element)封装
什么是枚举Enum 枚举 Enum是在众多语言中都有的一种数据类型,JavaScript中还没有(TypeScript有).用来表示一些特定类别的常量数据,如性别.学历.方向.账户状态等,项目开发中是 ...
- 【转】结构struct 联合Union和枚举Enum的细节讨论
结构struct 联合Union和枚举Enum的细节讨论 联合(Union)是一种构造数据类型,它提供了一种使不同类型数据类型成员之间共享存储空间的方法,同时可以实现不同类型数据成员之间的自动类型转换 ...
- 枚举类型与位域枚举Enum
一.概述 定义一个值类型,其中包含固定值集合.枚举类型变量可以是此集合中的任意一个或多个值.枚举使用enum关键字来声明,与类同级.枚举本身可以有修饰符,但枚举的成员始终是公共的,不能有访问修饰符.枚 ...
- 聊一聊Java的枚举enum
一. 什么是枚举 枚举是一种数据类型,具有集合的一些特点,可以存放多个元素,但存储对象有限且固定,枚举也有比较常见的使用场景,如我们需要表达性别(男.女),颜色(红.黄.蓝),星期(星期一.星期二.. ...
- 手摸手教你用 yapi-to-typescript生成Yapi的TypeScript数据类型
一 背景 现代社会比较重视效率,本着这个思想宗旨,能用工具自动高效做的事情,就不要低质量的勤奋.yapi-to-typescript就是一款自动生成接口请求与响应的typescript数据类型定义的工 ...
- MySQL字段之集合(set)枚举(enum)
MySQL字段之集合(set)枚举(enum) (2008-12-23 13:51:23) 标签:it 分类:MySQL 集合 SET mysql> create table jihe(f1 ...
- 枚举 enum
typedef enum : NSUInteger { <#MyEnumValueA#>, <#MyEnumValueB#>, <#MyEnumValueC#>, ...
随机推荐
- 菜鸡的Java笔记 - java 常用类库
CommonClassLibrary 常用类库 定时调度 定时调度指的是每到一个时刻,都会自动的产生某些特定的操作形式 con ...
- Python 爬取 书籍
... import requests from bs4 import BeautifulSoup def gethtml(url,h): r = requests.get(url,headers=h ...
- 记一次 IIS 站点配置文件备份和还原,物理路径文件批量备份
前言 上一篇文章实现了数据库的批量备份和还原,当然部署在服务器中的IIS站点备份也是一个十分繁琐的事,三四个数量不多的还好,像有一些服务器用了许久,承载几十个站点甚至更多,一个一个备份,再一个一个还原 ...
- 基于linux与线程池实现文件管理
项目要求 1.基本 用线程池实现一个大文件夹的拷贝,大文件夹嵌套很多小文件:实现复制到指定文件夹的全部文件夹. 2.扩充功能 显示进度条:拷贝耗时统计:类似linux的tree,不能直接用system ...
- [Comet1790]Ternary String Counting
令$f_{i,j,k}$表示前$i$个位置,三种字符最后一次出现的位置为$i,j$和$k$(保证$k<j<i$)的方案数 考虑转移(递推),即分为两步-- 1.填写第$i$个字符,即从$f ...
- [atAGC054C]Roughly Sorted
考虑对于确定的排列$\{p_{i}\}$,如何求出其(交换后)会得到的排列-- 令$cnt_{x}$为在$i$之前比$x$大的元素个数(其中$p_{i}=x$),显然排列合法当且仅当$cnt_{i}\ ...
- [atAGC045D]Lamps and Buttons
由于$p_{i}$是随机的,不断选择最小的.未被操作过的$i$并处理其所在的环一定是最优的,而这样与已知$p_{i}$的区别是,当选择了一个$i=p_{i}$,那么必然失败(而已知$p_{i}$时不会 ...
- 从零开始学Kotlin第六课
Kotlin调用java代码: 1.如果是内部工程的类,直接调用,如果是外部的工程项目按照java的方式将jar包导入进来. 2.实例化java对象 我们之前学java的时候实例化对象是这个样子的. ...
- 微信小程序中途加入云开发之坑
一开始未使用云开发的小程序项目,之后想使用云开发能力时,要先删除对应在开发者工具中的项目(先压缩备份源码!),再用开发者工具重新创建,很多时候都需要用这种方式进行处理
- Codeforces 1326F2 - Wise Men (Hard Version)(FWT+整数划分)
Codeforces 题目传送门 & 洛谷题目传送门 qwq 这题大约是二十来天前 AC 的罢,为何拖到此时才完成这篇题解,由此可见我是个名副其实的大鸽子( 这是我上 M 的那场我没切掉的 F ...