TypeScript enum 枚举实现原理
TypeScript enum 枚举实现原理
反向映射
https://www.typescriptlang.org/docs/handbook/enums.html
enum Direction {
Up,
Down,
Left,
Right
}
TypeScript enum 枚举实现原理,反向映射
"use strict";
var Direction;
(function (Direction) {
Direction[Direction["Up"] = 1] = "Up";
Direction[Direction["Down"] = 2] = "Down";
Direction[Direction["Left"] = 3] = "Left";
Direction[Direction["Right"] = 4] = "Right";
})(Direction || (Direction = {}));
const log = console.log;
log(`Direction =`, Direction)
/*
{
1: "Up", 2: "Down", 3: "Left", 4: "Right",
Up: 1, Down: 2, Left: 3, Right: 4,
}
*/
"use strict";
/**
*
* @author xgqfrms
* @license MIT
* @copyright xgqfrms
* @created 2020-10-21
* @modified
*
* @description
* @augments
* @example
* @link
*
*/
const log = console.log;
function logString(msg: string): void {
log(`message =`, msg)
}
function logNumber(msg: number): void {
log(`message =`, msg)
}
// number enum
enum DirectionNumber {
Up,
Down,
Left,
Right
}
// number enum with change index
enum DirectionIndex {
Up = 3,
Down,
Left,
Right
}
// string & number mixed enum
enum DirectionMixed {
Up = "up",
Down = 1,
Left,
Right
}
// string enum
enum Level {
A = "perfect",
B = "good",
C = "bad",
}
// const enum
const enum Roles {
Admin,
User,
Operator,
}
//number enum
enum Direction {
Up = 1,
Down,
Left,
Right
}
// TypeScript enum 枚举实现原理,反向映射
// Direction ={
// 1: "Up", 2: "Down", 3: "Left", 4: "Right",
// Up: 1, Down: 2, Left: 3, Right: 4,
// }
logString(Level.A);
logNumber(Direction.Down);
logNumber(Roles.Admin);
// console.log(0 /* Admin */);
"use strict";
/**
*
* @author xgqfrms
* @license MIT
* @copyright xgqfrms
* @created 2020-10-21
* @modified
*
* @description
* @augments
* @example
* @link
*
*/
var log = console.log;
function logString(msg) {
log("message =", msg);
}
function logNumber(msg) {
log("message =", msg);
}
// number enum
var DirectionNumber;
(function (DirectionNumber) {
DirectionNumber[DirectionNumber["Up"] = 0] = "Up";
DirectionNumber[DirectionNumber["Down"] = 1] = "Down";
DirectionNumber[DirectionNumber["Left"] = 2] = "Left";
DirectionNumber[DirectionNumber["Right"] = 3] = "Right";
})(DirectionNumber || (DirectionNumber = {}));
// number enum with change index
var DirectionIndex;
(function (DirectionIndex) {
DirectionIndex[DirectionIndex["Up"] = 3] = "Up";
DirectionIndex[DirectionIndex["Down"] = 4] = "Down";
DirectionIndex[DirectionIndex["Left"] = 5] = "Left";
DirectionIndex[DirectionIndex["Right"] = 6] = "Right";
})(DirectionIndex || (DirectionIndex = {}));
// string & number mixed enum
var DirectionMixed;
(function (DirectionMixed) {
DirectionMixed["Up"] = "up";
DirectionMixed[DirectionMixed["Down"] = 1] = "Down";
DirectionMixed[DirectionMixed["Left"] = 2] = "Left";
DirectionMixed[DirectionMixed["Right"] = 3] = "Right";
})(DirectionMixed || (DirectionMixed = {}));
// string enum
var Level;
(function (Level) {
Level["A"] = "perfect";
Level["B"] = "good";
Level["C"] = "bad";
})(Level || (Level = {}));
//number enum
var Direction;
(function (Direction) {
Direction[Direction["Up"] = 1] = "Up";
Direction[Direction["Down"] = 2] = "Down";
Direction[Direction["Left"] = 3] = "Left";
Direction[Direction["Right"] = 4] = "Right";
})(Direction || (Direction = {}));
// TypeScript enum 枚举实现原理,反向映射
// Direction ={
// 1: "Up", 2: "Down", 3: "Left", 4: "Right",
// Up: 1, Down: 2, Left: 3, Right: 4,
// }
logString(Level.A);
logNumber(Direction.Down);
logNumber(0 /* Admin */);
tsconfig bug ???
const timestamp = Date.now();
// const timestamp = new Date().getTime();
// computed enum
const enum Dynamic {
role = Roles.User,
level = Level.A,
// time = Date.now(),
// time = new Date().getTime(),
time = timestamp,
// time = Math.random(),
value = 1 + 2,
len = "123".length,
}
// const enum member initializers can only contain literal values and other computed enum values.
OK
computed enum const bug
remove
const
keyword
// computed enum const bug
// const enum DynamicConstBug {
// role = Roles.User,
// level = Level.A,
// time = Date.now(),
// timestamp = new Date().getTime(),
// random = Math.random(),
// value = 1 + 2,
// len = "123".length,
// }
// const enum member initializers can only contain literal values and other computed enum values.
// computed enum
enum Dynamic {
role = Roles.User,
level = Level.A,
time = Date.now(),
timestamp = new Date().getTime(),
random = Math.random(),
value = 1 + 2,
len = "123".length,
}
refs
https://www.typescriptlang.org/docs/
xgqfrms 2012-2020
www.cnblogs.com 发布文章使用:只允许注册用户才可以访问!
TypeScript enum 枚举实现原理的更多相关文章
- Enum枚举法
java enum(枚举)使用详解 + 总结 enum 的全称为 enumeration, 是 JDK 1.5 中引入的新特性,存放在 java.lang 包中. 下面是我在使用 enum 过程 ...
- Enum 枚举类
目录 Enum 枚举类 基础 定义与用途 基本方法 示例 进阶 实现原理 枚举与Class对象 自定义枚举类和构造方法及toString() Enum中使用抽象方法来实现枚举实例的多态性 Enum与接 ...
- TypeScript入门七:TypeScript的枚举
关于枚举 数字枚举 字符串枚举 异构枚举 计算的和常量成员 运行时的枚举与反向映射 常量枚举与外部枚举 一.关于枚举 枚举:一个集的枚举是列出某些有穷序列集的所有成员的程序,或者是一种特定类型对象的计 ...
- c# (ENUM)枚举组合类型的谷歌序列化Protobuf
c# (ENUM)枚举组合类型的谷歌序列化Protobuf,必须在序列化/反序列化时加上下面: RuntimeTypeModel.Default[typeof(Alarm)].EnumPassthru ...
- C#将Enum枚举映射到文本字符串
介绍 当将以前的C代码移植到C#中时,我快发疯了,因为有很多的数组需要将常量映射到字符串.当我在寻找一个C#的方法来完成的时候,我发现了一个自定义属性和映射的方法. 如何使用代码? 对每一个enum枚 ...
- MVC3不能正确识别JSON中的Enum枚举值
一.背景 在MVC3项目里,如果Action的参数中有Enum枚举作为对象属性的话,使用POST方法提交过来的JSON数据中的枚举值却无法正确被识别对应的枚举值. 二.Demo演示 为了说明问题,我使 ...
- 161208、Java enum 枚举还可以这么用
在大部分编程语言中,枚举类型都会是一种常用而又必不可少的数据类型,Java中当然也不会例外.然而,Java中的Enum枚举类型却有着许多你意想不到的用法,下面让我们一起来看看. 先来看一段代码示例: ...
- Python中模拟enum枚举类型的5种方法分享
这篇文章主要介绍了Python中模拟enum枚举类型的5种方法分享,本文直接给出实现代码,需要的朋友可以参考下 以下几种方法来模拟enum:(感觉方法一简单实用) 复制代码代码如下: # way1 ...
- java之enum枚举(2015年05月28日)
背景: 今天启动了一个新的项目,由于要从之前的旧项目中拿过来一些代码,所以就看了下公司之前项目代码,发现有定义的常量类,也有枚举类,然后就在想着两者的功能差不多,那他们之间到底有什么区别呢,所以就决定 ...
随机推荐
- docker容器的基本命令
#安装docker yum -y install docker systemctl start docker.service systemctl status docker systemctl e ...
- WIFI 国家码和信道划分
前言 网上百度了很多资料,都没有找到国家码对应支持哪些信道的资料,无奈只能qiang到谷歌,分享给大家完整的WIFI 国家码和信道划分. 安卓WIFI国家码的影响 android中设置wifi国家码的 ...
- day03 函数基本语法及特性 2. 参数与局部变量 3. 返回值 嵌套函数 4.递归 5.匿名函数 6.函数式编程介绍 7.高阶函数 8.内置函数
本节内容 1. 函数基本语法及特性 2. 参数与局部变量 3. 返回值 嵌套函数 4.递归 5.匿名函数 6.函数式编程介绍 7.高阶函数 8.内置函数 温故知新 1. 集合 主要作用: 去重 关系测 ...
- innodb和myisam原理
MyISAM索引实现 MyISAM引擎使用B+Tree作为索引结构,叶节点的data域存放的是数据记录的地址.如图: 这里设表一共有三列,假设我们以Col1为主键,则上图是一个MyISAM表的主索引 ...
- LOJ10067
LOJ10067 构造完全图 给你一棵树 T,找出 T 能扩展出的边权和最小的完全图 G. 第一行 N 表示树 T 的点数: 保证输入数据构成一棵树. 输出仅一个数,表示最小的完全图 G 的边权和. ...
- Spring框架相关博文集
收藏一些干货博文. Spring 多数据源管理源码分析 Spring事务管理详解 Spring源码解析 Spring框架自学之路
- C++复习笔记(1)
复(su)习(cheng)一下c++. 1. 函数 函数重载:允许用同一函数名定义多个函数,但这些函数必须参数个数不同或类型不同. 函数模版: (应该是跟java的泛化类似,内容待扩展) templa ...
- Linux-apache httd.conf文件详解
Linux-apache httd.conf文件详解 # This is the main Apache server configuration file. It contains the # co ...
- python中如何添加模块导入路径?
python中自定义模块导入路径的方式主要有以下3种: (1)使用sys.path.append() 随着程序执行,会动态地添加模块导入的路径,但是程序执行结束后就会立即失效(临时性的) import ...
- 深入浅出Java线程池:源码篇
前言 在上一篇文章深入浅出Java线程池:理论篇中,已经介绍了什么是线程池以及基本的使用.(本来写作的思路是使用篇,但经网友建议后,感觉改为理论篇会更加合适).本文则深入线程池的源码,主要是介绍Thr ...