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