在构建阶段检查对象属性的存在

时间:2016-02-16 11:49:16

标签: javascript webpack babeljs eslint

我正在寻找一种可以帮助我实现这一目标的解决方案:

如果我尝试这样做,我希望在“构建”时出现错误:

var ciao = {
  wow: 'ciaoooo',
}

console.log(ciao.wowe); // this should be an error because the prop does not exist

我已经尝试过Typescript并且它完成了这些工作,但似乎只有这样才能使用它。我想知道ESLint或其他什么东西可以帮助我解决这类问题。

2 个答案:

答案 0 :(得分:1)

ESLint没有这样的规则。要创建一个能够捕获所有可能情况的规则将非常困难。 ESLint依赖于Escope来跟踪声明的变量,但Escope不跟踪对象属性,并且有太多方法可以将属性添加到声明的对象。

答案 1 :(得分:1)

您要求提供静态类型语言的功能。如果您需要有关构建时变量的可靠信息,那么您需要定义接口和类型的" overkill" 。但是,TypeScript是可选的类型,如果您希望公共接口使用静态类型,这可能是一个很好的折衷方案。

如果您想要进行类型检查但不想使用转换器,您也可以尝试Flow尝试尽可能地从您的代码中获取类型信息。但是,它没有附加类型信息的能力非常有限。

关于您的实际问题:我认为可以使用ESLint或Babel在模块(或文件)边界内派生类型信息。只要您在这些边界内使用该对象,静态分析可能对您有所帮助。但除此之外,由于JavaScript的动态特性,我认为它不可靠。不幸的是,我不知道这样的规则或插件。