博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[TypeScript] Collect Related Strings in a String Enum in TypeScript
阅读量:4972 次
发布时间:2019-06-12

本文共 2102 字,大约阅读时间需要 7 分钟。

As of TypeScript 2.4, it is now possible to define string enums, or more precisely, enums with string members. Just like any other numeric enum, string enums can be made constant using the const modifier so that they disappear entirely from the generated JavaScript; in this case, all enum values will be inlined into the output.

 

For example,we  have the code:

fetch("https://swapi.co/api/people/1/", {  headers: {      Accept: 'application/json'  }}).then((res) => res.json()).then(response => {    console.log(response.name)});

 

We want to replace 'application/json' to use Typescript enum.

enum MediaTypes {  JSON = "application/json"}fetch("https://swapi.co/api/people/1/", {  headers: {      Accept: MediaTypes.JSON  }}).then((res) => res.json()).then(response => { console.log(response.name)});

 

From the compiled code, we can see the output:

var MediaTypes;(function (MediaTypes) {    MediaTypes["JSON"] = "application/json";})(MediaTypes || (MediaTypes = {}));fetch("https://swapi.co/api/people/1/", {    headers: {        Accept: MediaTypes.JSON    }})    .then(function (res) { return res.json(); })    .then(function (response) {    console.log(response.name);});

The compile code, it add a IIFE define and set JSON code to 'application/json'.

 

Sometime, we don't want this meta code goes into production code, the way to do this is add "const":

const enum MediaTypes {  JSON = "application/json"}/*compiled code**/fetch("https://swapi.co/api/people/1/", {    headers: {        Accept: "application/json" /* JSON */    }})    .then(function (res) { return res.json(); })    .then(function (response) {    console.log(response.name);});

As we can see, the output code doesn't have IIFE anymore, the code is much smaller.

 

You can get reverse mapping by using number:

enum Port {  NUM = 412}/**compiled code*/(function (Port) {    Port[Port["NUM"] = 412] = "NUM";})(Port || (Port = {}));

 

Last thing, if you really want to use "const" keyword but still want to keep IIFE meta code, you can set up in tsconfig.json:

{  "preserveConstEnums": true}

 

转载于:https://www.cnblogs.com/Answer1215/p/7801172.html

你可能感兴趣的文章
在TabControl中的TabPage选项卡中添加Form窗体
查看>>
inout port仿真
查看>>
oracle中SET DEFINE意思
查看>>
个人作业-最长英语链
查看>>
JMeter-性能测试之报表设定的注意事项
查看>>
1066-堆排序
查看>>
仿面包旅行个人中心下拉顶部背景放大高斯模糊效果
查看>>
强大的css3
查看>>
[Luogu] 引水入城
查看>>
放张图片试试
查看>>
【WEB】高并发Web服务的演变-节约系统内存和CPU
查看>>
逻辑漏洞挖掘方式
查看>>
Servlet 编写过滤器
查看>>
Redis 数据类型
查看>>
Console-算法-回文数
查看>>
C#常用格式输出
查看>>
创建数据库表的SQL语句
查看>>
在Visual Studio 2010[VC++]中使用ffmpeg类库
查看>>
redis(四)--简单实现Redis缓存中的排序功能
查看>>
盒子模型
查看>>