|  |      1matthewzhong      2022-03-31 11:23:15 +08:00 我理解原先的 key ,value 应该还会在 | 
|  |      2murmur      2022-03-31 11:24:16 +08:00 npm install object-swap-key-val 这不是更骚 | 
|  |      3superfatboy      2022-03-31 11:24:50 +08:00 这个不是枚举么?? | 
|  |      4libook      2022-03-31 11:24:54 +08:00  1 干得好,以后别这么干了…… 这个说是 ts 代码,但实际上完全兼容 js 代码,没有任何 ts 附加特性。 这种互换没啥意义,程序已知 2\3\4 和 Red\Blue\Yellow 的时候,完全可以直接 Cute[2]="Red",key 里面堆这么多都是废话。 而且原本的 key 都没去掉,只是给 Cute 对象增加了 2/3/4 这三个新 key ,造成了数据冗余,除非很确定后续会同时用到这两套 key ,但为了 debug 没那么痛苦我依然建议分成两个对象来分别存储。 更有实际意义的是当 key 和 value 都是动态变化的情况下进行互换,但其实一个循环就能搞定了。 这样的代码很可能过不了 code review…… | 
|  |      5AV1      2022-03-31 11:27:41 +08:00 这是 enum 转为 js 之后的代码吧。 enum 是我觉得 ts 里最迷惑的地方,我从来不用。 | 
|  |      6anjianshi      2022-03-31 11:28:07 +08:00 这种“骚操作”,既不简洁,也不容易读。且和 TypeScript 没有关系,就是普通 JavaScript 代码。 试试下面的? ``` // 原版本 var Cute; (function (Cute) { Cute[(Cute["Red"] = 2)] = "Red"; Cute[(Cute["Blue"] = 3)] = "Blue"; Cute[(Cute["Yellow"] = 4)] = "Yellow"; })(Cute || (Cute = {})); var cc = Cute.Blue; console.log('A', Cute, cc); // 改良版 var Cute2 = [['Red', 2], ['Blue', 3], ['Yellow', 4]].reduce(function (o, pair) { return { ...o, [pair[0]]: pair[1], [pair[1]]: pair[0] } }, {}) var cc2 = Cute2.Blue; console.log('B', Cute2, cc2); // 改良精简版 var Cute3 = [['Red', 2], ['Blue', 3], ['Yellow', 4]].reduce((o, [k, v]) => ({ ...o, [k]: v, [v]: k }), {}) var cc3 = Cute3.Blue; console.log('C', Cute3, cc3); ``` | 
|      7nulIptr      2022-03-31 11:28:56 +08:00  1 这跟 ts 有啥关系? pr 里看到这种代码肯定会 reject 的。 建议讨论一下 const int const *a,b;里面 b 是什么类型 int i=0;int b=++i+i+++++i;里面 b 的值是多少 | 
|  |      8magewu1223ll      2022-03-31 11:29:30 +08:00 这就是枚举编译后的代码啊 | 
|  |      9AV1      2022-03-31 11:33:05 +08:00 | 
|      11mxT52CRuqR6o5      2022-03-31 11:45:09 +08:00 via Android @libook 标题里说了是 ts 啊 | 
|      12gdrk      2022-03-31 11:51:15 +08:00 这是 enum 编译后的代码吧,之前还是看文档时看到过,后面也没用过这个特性。不知道在什么场景下会用到 | 
|  |      13davin      2022-03-31 13:08:43 +08:00 增强代码可读性,预防某些魔法值,用起来有时候比写 Switch 爽,每个实例的唯一性等等。比如服务端给个 status 字段,值为 1 代表未开始,2 进行中,3 已完成,比较适合用 enum 来定义。 | 
|  |      14fstar      2022-03-31 13:16:52 +08:00 这个我一看就知道其实是 TypeScript 的 enum 的编译为 JavaScript 的结果,是 TS 枚举的反射特性。 https://www.typescriptlang.org/docs/handbook/enums.html#reverse-mappings enum Cute { Red = 2, Blue, Yellow } 没啥问题,编译用的模板越紧凑越好。 | 
|  |      16catinsides      2022-03-31 13:57:27 +08:00  3 我替 OP 把标题完善一下吧:   ts 编译结果后中的骚操作 又是 code review ,又是改良的,不愿再笑 | 
|  |      17ychost      2022-03-31 14:53:45 +08:00 代码写的很骚,下次别写了 | 
|      180o0O0o0O0o      2022-03-31 15:09:20 +08:00 via iPhone | 
|  |      19shakaraka PRO 那些对编译后的代码 review ,那不是有🧊么。。。如果真是为了极致性能,为何不写原生 js | 
|  |      20zhwithsweet      2022-03-31 15:33:40 +08:00 从来不用枚举! | 
|  |      21KMpAn8Obw1QhPoEP      2022-03-31 15:39:16 +08:00 via Android @0o0O0o0O0o 最近在玩这个 还挺有意思的 不过测试用例不够完善 有时候过了是过了 未必是对的 | 
|  |      23IvanLi127      2022-03-31 18:31:11 +08:00 via Android 楼主这标题,把 ts 改成 tsc 或许也能让楼里少出现些 reviewer 吧  哈哈哈哈。这代码我第一次看也觉得挺骚的。 |