搜索词
enum assignment
建议
交换赋值顺序
用例
枚举类型
示例
enum Action {
foo
bar
baz
thequickbrownfoxjumpsoverthelazydog
}
当前生成:
"use strict";
var Action;
(function (Action) {
Action[Action["foo"] = 0] = "foo";
Action[Action["bar"] = 1] = "bar";
Action[Action["baz"] = 2] = "baz";
Action[Action["thequickbrownfoxjumpsoverthelazydog"] = 3] = "thequickbrownfoxjumpsoverthelazydog";
})(Action || (Action = {}));
建议改为:
"use strict";
var Action;
(function (Action) {
Action[Action[0] = "foo"] = 0;
Action[Action[1] = "bar"] = 1;
Action[Action[2] = "baz"] = 2;
Action[Action[3] = "thequickbrownfoxjumpsoverthelazydog"] = 3;
})(Action || (Action = {}));
检查清单
我的建议满足以下准则:
- 这不会对现有的TypeScript/JavaScript代码造成破坏性改变
- 这不会改变现有JavaScript代码的运行时行为
- 这可以在不根据表达式的类型发出不同的JS的情况下实现
- 这不是一个运行时特性(例如库功能,带有JavaScript输出的非ECMAScript语法等)
- 这个特性将与 TypeScript's Design Goals 的其他部分保持一致。
8条答案
按热度按时间hc2pp10m1#
重复的#19848
ppcbkaq52#
#19848被标记为#2655的重复内容,并自动关闭。#2655是关于关闭编译器和
key['A']
与key.A
的讨论。这个问题以及#19848的目的是一个单独的问题。xxls0lw83#
#19848的评论:
我认为你可能误解了,这只是关于TS生成较小的代码,与任何后处理步骤分开。
这是与这里相同的原因(较小的发射)。这是一个重复的问题。#2655只是与之略有关联。
然而,你说得对——另一个问题是锁定的。
p8h8hvxi4#
交换赋值顺序导致错误行为。
与 #29838 和 #19848 重复
cwtwac6a5#
你不能将枚举键分配给函数调用,所以这不适用,但你最终会调用两次该函数,所以我明白你遇到的问题。我认为编译器仍然可以通过在枚举中进行方法调用时执行类似以下操作来处理这种情况:
或者通过实现这两种模式,因为我确信这是一种边缘情况,尽管我在支持多种模式方面确实看到了问题。通过这个更改,我们可以在代码库中节省大约5kb的空间。
jm2pwxwz6#
解:对于非数值字面量的初始化,我们可以按照当前的方式进行;对于数值字面量的初始化,或者没有初始化时,我们可以使用你建议的方式。
js81xvg67#
根据我所了解的,这应该可以工作。我认为它对于除了方法调用、属性访问器和枚举中其他键的引用(它只是变得复杂)之外的任何内容都可以工作。例如:
我刚刚测试了最后一个,似乎它是安全的:
生成:
j8yoct9x8#
@markkahn取决于有创意的人怎么做 :)
是的,好吧...没有人会这样做,但你永远不知道。