[英]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已经有一段时间了,它是宏实用程序,但是也许您可以编写一个简单的宏,将您的String-Array扩展为所需的Structure。
否则,您可以尝试使用Typescript插件。 首先:每个有效的JS应该是有效的TS(不完全了解ES7,以及某些ES6是否会打扰该插件)。
但是TS具有枚举实现,因此webstorm应该为您提供自动填充和类型安全性
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.