web前端:Typescript使用字符串联合类型代替枚举类型

    作者: 孑孓子 更新于: 2020-03-02 11:44:44

    Web开发

      TypeScript是一种由微软开发的自由和开源的编程语言。它是Javascript的一个超集,而且本质上向这个语言添加了可选的静态类型和基于类的面向对象编程

      TypeScript宗旨

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

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

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

      Enum实现

      //TypeScript

      enumTest{

      enum1=2,

      enum2,

      enum3

      }

      consttest:Test=Test.enum2;//3

      //编译为javscript

      varTest;

      (function(Test){

      Test[Test["enum1"]=2]="enum1";

      Test[Test["enum2"]=3]="enum2";

      Test[Test["enum3"]=4]="enum3";

      })(Test||(Test={}));

      vartest=Test.enum2;//3

      推荐联合类型(stringliteralunion)实现

      //Typescript

      typeTest='enum1'|'enum2'|'enum3';

      consttest:Test='enum2';

      //编译为javscript,非常简单

      vartest='enum2';

      TypeScript是一种由微软开发的自由和开源的编程语言。它是JavaScript的一个超集,而且本质上向这个语言添加了可选的静态类型和基于类的面向对象编程。安德斯·海尔斯伯格,C#的首席架构师,已工作于TypeScript的开发。

课课家教育

未登录