带IDE完成的Javascript伪枚举

带IDE完成的Javascript伪枚举,javascript,enums,ide,webstorm,Javascript,Enums,Ide,Webstorm,有时,我需要类似枚举的结构,用于Node.JS中的固定字符串值集。基本上是一个对象,每个枚举值都有键,每个值都是一个等于键的字符串: var State = {FOO: 'FOO', BAR: 'BAR', SOME_REALLY_LONG_NAME: 'SOME_REALLY_LONG_NAME'}; 这使我能够键入State.S,IDE将建议使用State。有些名称非常长,而且打字错误实际上已经消除了。如果(x==State.FOO)等,我可以做 然而,上述语法显然并不理想,因为在创建值集

有时,我需要类似枚举的结构,用于Node.JS中的固定字符串值集。基本上是一个对象,每个枚举值都有键,每个值都是一个等于键的字符串:

var State = {FOO: 'FOO', BAR: 'BAR', SOME_REALLY_LONG_NAME: 'SOME_REALLY_LONG_NAME'};
这使我能够键入
State.S
,IDE将建议使用
State。有些名称非常长,而且打字错误实际上已经消除了。如果(x==State.FOO)
等,我可以做

然而,上述语法显然并不理想,因为在创建值集的过程中,每个文本都有重复。因此,我可以这样做,例如:

var State = _.indexBy(['FOO', 'BAR', 'SOME_REALLY_LONG_NAME'];
但是,一旦间接创建了对象,IDE(在我的例子中是WebStorm)将无法建议/自动完成这些值。当然,使用JavaScript时,我们不会因为使用auto complete而被宠坏,但在我的例子中,它会让我感到困扰,因为我的“枚举”的全部目的是简化固定字符串集的使用

还有几个枚举实用程序可以创建更合适的枚举,但它们也会遇到同样的问题。另外,如果我需要的基本上是一组固定的字符串,那么更合适的枚举将迫使我编写
State.FOO.key
来获取字符串值


有没有一种聪明的方法来完成这些真正简单的{key:'key'}映射,而不必在创建过程中键入每个键两次,但仍然保持IDE对对象中存在哪些属性的理解?我猜WebStorm只执行静态代码分析,一旦调用一个函数就会退出窗口?或者有什么巧妙的方法吗?

我使用Webstorm已经有一段时间了,它是宏实用程序,但也许你可以编写一个简单的宏,将字符串数组扩展到所需的结构中

否则,您可以尝试Typescript插件。首先:每个有效的JS都应该是有效的TS(不知道ES7的确切情况,也不知道一些ES6是否会对插件造成bug)


但是TS有一个Enum实现,因此webstorm应该为您提供自动完成和类型安全性

我一直想尝试TS。我绝对会的。谢谢