【问题标题】:Check presence of object property during bulding phase在构建阶段检查对象属性的存在
【发布时间】:2016-05-27 16:29:53
【问题描述】:
我正在寻找可以帮助我实现这一目标的解决方案:
如果我尝试这样做,我希望在“构建”时抛出错误:
var ciao = {
wow: 'ciaoooo',
}
console.log(ciao.wowe); // this should be an error because the prop does not exist
我已经尝试过 Typescript 并且它可以完成工作,但仅为此使用它似乎有点矫枉过正。我想知道 ESLint 是否有什么东西可以帮助我解决这类问题。
【问题讨论】:
标签:
javascript
webpack
babeljs
eslint
【解决方案1】:
您要求的是静态类型语言的功能。如果您想要关于构建时变量的可靠信息,您将需要这种定义接口和类型的“矫枉过正”。但是,TypeScript 是可选类型的,如果您希望公共接口使用静态类型,这可能是一个很好的折衷方案。
如果您想要类型检查但又不想使用转译器,您也可以尝试Flow,它会尽可能地从您的代码中获取类型信息。但是,它在没有额外类型信息的情况下的功能非常有限。
关于您的实际问题:我认为可以使用 ESLint 或 Babel 在模块(或文件)边界内派生类型信息。只要您在这些边界内使用该对象,静态分析就可能对您有所帮助。但除此之外,由于 JavaScript 的动态特性,我认为它并不可靠。不幸的是,我不知道这样的规则或插件。
【解决方案2】:
ESLint 没有这样的规则。很难创建一个能够捕获所有可能情况的规则。 ESLint 依赖 Escope 来跟踪声明的变量,但 Escope 不跟踪对象的属性,而且向声明的对象添加属性的方法太多了。