TypeScript宗旨

我觉得Typescript的宗旨是 任何一个 TypeScript 程序,在手动删去类型部分,将后缀改成 .js 后,都应能够正常运行。Typescript是javascript的超集,是编译期行为,不引入额外开销,不改变运行时行为,始终与 ESMAScript 语言标准一致。

但是enum类型了引入了 JavaScript 没有的数据结构(编译成一个双向 map),入侵了运行时,与 TypeScript 宗旨不符。用 字符串联合类型('enum1' | 'enum2' | 'enum3')可以做到相同的事,且在调试时可读性更好。

以下 代码展示了enum违背了宗旨的证据:

Enum实现

// TypeScript
enum Test {
enum1 = 2,
enum2,
enum3
}
const test:Test = Test.enum2; // 3 // 编译为javscript
var Test;
(function (Test) {
Test[Test["enum1"] = 2] = "enum1";
Test[Test["enum2"] = 3] = "enum2";
Test[Test["enum3"] = 4] = "enum3";
})(Test || (Test = {}));
var test = Test.enum2; // 3

推荐联合类型(string literal union)实现

// Typescript
type Test = 'enum1' | 'enum2' | 'enum3';
const test: Test = 'enum2'; // 编译为javscript,非常简单
var test = 'enum2';

Typescript使用字符串联合类型代替枚举类型的更多相关文章

  1. { MySQL基础数据类型}一 介绍 二 数值类型 三 日期类型 四 字符串类型 五 枚举类型与集合类型

    MySQL基础数据类型 阅读目录 一 介绍 二 数值类型 三 日期类型 四 字符串类型 五 枚举类型与集合类型 一 介绍 存储引擎决定了表的类型,而表内存放的数据也要有不同的类型,每种数据类型都有自己 ...

  2. Entity FreamWork 无法创建“System.Object”类型的常量值。此上下文仅支持基元类型或枚举类型错误解决

    Entity FreamWork 无法创建“System.Object”类型的常量值.此上下文仅支持基元类型或枚举类型错误解决: 最近在开发中把我原来抄的架构里面的主键由固定的Guid改成了可以泛型指 ...

  3. 无法创建“System.Object”类型的常量值。此上下文仅支持基元类型或枚举类型

    Entity FreamWork 无法创建“System.Object”类型的常量值.此上下文仅支持基元类型或枚举类型错误解决: 最近在开发中把我原来抄的架构里面的主键由固定的Guid改成了可以泛型指 ...

  4. 标C编程笔记day05 函数声明、文件读写、联合类型、枚举类型

    函数声明:     1.隐式声明:在没有声明的情况下,系统可依据參数类型推断去调用函数(有可能出错)     2.显式声明:声明在被调用之前.如:double add(double,double);  ...

  5. mysql字符串类型(枚举类型)

    原文链接:https://blog.csdn.net/qq_34530405/article/details/81738907 本文记录MySql数据库中enum类型数据的使用细节和注意事项. 首先在 ...

  6. 网易云课堂_C语言程序设计进阶_第一周:数据类型:整数类型、浮点类型、枚举类型_1计算分数精确值

    1 计算分数精确值(10分) 题目内容: 由于计算机内部表达方式的限制,浮点运算都有精度问题,为了得到高精度的计算结果,就需要自己设计实现方法. (0,1)之间的任何浮点数都可以表达为两个正整数的商, ...

  7. datatable to entiy list 不支持可空类型和枚举类型

    还没有找到解决方法,暂存,希望有知道能告诉我.谢谢.

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

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

  9. TypeScript 类型推导及类型兼容性

    类型推导就是在没有明确指出类型的地方,TypeScript编译器会自己去推测出当前变量的类型. 例如下面的例子: let a = 1; 我们并没有明确指明a的类型,所以编译器通过结果反向推断变量a的类 ...

随机推荐

  1. 一起学Vue之模板语法

    概述 Vue.js 使用了基于 HTML 的模板语法,允许开发者声明式地将 DOM 绑定至底层 Vue 实例的数据.所有 Vue.js 的模板都是合法的 HTML ,所以能被遵循规范的浏览器和 HTM ...

  2. JS---变速动画函数封装

    变速动画函数封装 匀速动画:每次步数都是10 (var step=10;) 变速(缓动)动画:每次的步数是用当前位置和目标位置相减 var step=(target-current)/10; 代码如下 ...

  3. PHP 正则匹配h1的数据报错 preg_match(): Unknown modifier 'h' in

    问题: $str = "<h1>this is test msg</h1>"; $ruler = "/^<h1>(.*?)</h ...

  4. JDK1.8新特性-Lambda表达式

    Lambda 表达式 Lambda 表达式,也可称为闭包,它是推动 Java 8 发布的最重要新特性. Lambda 允许把函数作为一个方法的参数(函数作为参数传递进方法中). 使用 Lambda 表 ...

  5. NGUI 源码分析- UIWidgetInspector

    NGUI Version 3.9.0 //---------------------------------------------- // NGUI: Next-Gen UI kit // Copy ...

  6. fastjson又被发现漏洞,这次危害可能会导致服务瘫痪

    0x00 漏洞背景 2019年9月5日,fastjson在commit 995845170527221ca0293cf290e33a7d6cb52bf7上提交了旨在修复当字符串中包含\\x转义字符时可 ...

  7. Docker系列之原理简单介绍

    目录 1.1.Docker架构简介 1.2.Docker 两个主要部件 1.3.虚拟机和Docker对比: 1.4.Docker内部结构 Docker系列之原理简单介绍 @ Docker是一个开源的应 ...

  8. DevExpress Applications<3>

    Project Template Project Template Information Template Name Template Description Controls and Compon ...

  9. C lang:Definition function

    Ax_note in parameter for show_n_char() is formal parameter Aa_Definition function #include <stdio ...

  10. 使用可移动表空间(TTS)的最佳做法 (Doc ID 1457876.1)

    Best Practices for Using Transportable Tablespaces (TTS) (Doc ID 1457876.1) APPLIES TO: Oracle Datab ...