Javascript 使用命令行工具检测嵌套的未定义属性(eslint/standard)

Javascript 使用命令行工具检测嵌套的未定义属性(eslint/standard),javascript,eslint,Javascript,Eslint,我希望能够使用静态代码分析工具standard/eslint来检测以下情况: const obj = {a: {b: 'just a value'}} // should be obj.a.b const b = obj.a.c // so b will be undefined 标准和ESLint在这里都不会发现任何问题。 是否可以使用良好的代码质量工具来检测它 举个例子,IDEA/Webstorm正确地报告了问题 因此,我想知道,是否可以使用命令行工具检测相同的问题。在J

我希望能够使用静态代码分析工具standard/eslint来检测以下情况:

  const obj = {a: {b: 'just a value'}}
  // should be obj.a.b
  const b = obj.a.c
  // so b will be undefined
标准和ESLint在这里都不会发现任何问题。 是否可以使用良好的代码质量工具来检测它

举个例子,IDEA/Webstorm正确地报告了问题

因此,我想知道,是否可以使用命令行工具检测相同的问题。

在JavaScript中,undefined是变量的正确值,因此无法检测该值的赋值。 对于您的问题,我建议您定义如下函数:

const assignNested = function(value) {
  if (value === undefined)
    throw new Error("undefined assignment");
  return value;
}
然后,您可以按如下方式重写代码:

const obj = {a: {b: 'just a value'}};
const b = assignNested(obj.a.b); // b = 'just a value'
const c = assignNested(obj.a.c); // raise exception

别忘了抓住你的异常。如果您想定义自己的异常类型,可以查看一下。

Javascript不是类型化语言,因此在运行代码之前不可能真正验证对象的解构

例如,当您从HTTP请求获得响应时,您的代码质量工具不知道生成的JSON对象。

静态类型检查器类似于或旨在捕获此类错误。尝试将示例代码粘贴到或中。在不修改代码以添加特定类型注释的情况下,两个检查程序都会捕获错误

:

:


是否引发异常?@BNilsou是的,我希望静态代码质量工具引发警告/错误我认为本文和自定义规则可能会为您指明正确的方向:
4: const b = obj.a.c
                   ^ property `c`. Property not found in
4: const b = obj.a.c
             ^ object literal
Property 'c' does not exist on type '{ b: string; }'.