具有 IDE 完成功能的 Javascript 伪枚举

Javascript pseudo-enum with IDE completion

本文关键字:Javascript 枚举 功能 IDE 成功 具有      更新时间:2023-09-26

有时我需要类似枚举的结构来固定 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 应该给你自动完成和类型安全