具有 IDE 完成功能的 Javascript 伪枚举
Javascript pseudo-enum with IDE completion
有时我需要类似枚举的结构来固定 Node.JS 中的字符串值集。基本上是一个对象,每个枚举值都有键,每个值都是一个等于键的字符串:
var State = {FOO: 'FOO', BAR: 'BAR', SOME_REALLY_LONG_NAME: 'SOME_REALLY_LONG_NAME'};
这使我能够键入State.S
,IDE 将建议State.SOME_REALLY_LONG_NAME
,并且实际上消除了拼写错误。我可以做if (x === State.FOO)
等等。
然而,上述语法显然并不理想,因为在创建值集期间每个文本都是重复的。所以我可以做例如:
var State = _.indexBy(['FOO', 'BAR', 'SOME_REALLY_LONG_NAME'];
但是,一旦间接创建对象,IDE(在我的例子中为 WebStorm(将无法建议/自动完成值。当然,使用 JavaScript 无论如何,我们都不会被自动完成的工作宠坏,但就我而言,它让我感到烦恼,因为我的"枚举"的全部目的是简化一组固定字符串的使用。
还有几个枚举实用程序可以创建更合适的枚举,但它们会遭受同样的事情。此外,如果我需要的基本上是一组固定的字符串,那么更合适的枚举将迫使我编写State.FOO.key
以获取字符串值。
有没有一种聪明的方法来完成这些非常简单的 {key: 'key'} 映射,而无需在创建过程中键入每个键两次,但同时仍保持 IDE 对对象中存在哪些属性的理解?我猜 WebStorm 只执行静态代码分析,一旦调用函数就会消失?还是有什么聪明的伎俩?
我已经有一段时间使用 Webstorm 了,它是宏实用程序,但也许您可以编写一个简单的宏,将您的字符串数组扩展到所需的结构中。
否则,您可以尝试打字稿插件。首先:每个有效的JS都应该是有效的TS(不知道ES7,如果某些ES6可能会错误插件(。
但是 TS 有一个枚举实现,因此 webstorm 应该给你自动完成和类型安全
- 如何发送分配列表<字符串>到JavaScript数组或可枚举对象
- JavaScript数组的子类化破坏了快速枚举
- 为什么Javascript程序员更喜欢在代码中重复字符串作为常量,而不是使用枚举类型的对象
- 如何从 Javascript 访问 Java 枚举 (Java 1.8)
- Javascript propertyIsNumerable-是否有可枚举的方法
- Javascript不可枚举属性
- TypeScript 中的枚举:JavaScript 代码在做什么
- 如何更改 Javascript 对象属性的可写可枚举和可配置值
- JavaScript for.in 和枚举奇怪的行为
- javascript 是否保证枚举同一对象两次将以相同的顺序遍历字段
- 无法在 javascript 中枚举对象的所有属性
- Javascript:枚举全局变量
- 如何将 Typescript 枚举的值添加到我的 JavaScript 函数中
- 具有 IDE 完成功能的 Javascript 伪枚举
- Javascript中的枚举
- JavaScript枚举对象-使用字符串或数字的速度更快
- Javascript枚举对象值:obj.key与obj[key]的区别
- JavaScript-枚举嵌套对象结构
- 如何用javascript枚举文档中的所有html id's ?
- 搜索javascript枚举