zoukankan      html  css  js  c++  java
  • Typescript使用字符串联合类型代替枚举类型

    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';
  • 相关阅读:
    Linux之mysql的重新安装
    prometheus监控采集数据promSql
    安装grafana
    prometheus server主配置文件prometheus.yml
    【Java拾遗】不可不知的 Java 序列化
    Centos7 openssh 离线升级8.4
    web for pentester sqli
    web for pentester xss
    ESXI 安装脚本
    nginx 499状态码排查
  • 原文地址:https://www.cnblogs.com/handboy/p/11410066.html
Copyright © 2011-2022 走看看