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

时间:2017-03-16 11:43:40

标签: javascript eslint

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

  const obj = {a: {b: 'just a value'}}
  // should be obj.a.b
  const b = obj.a.c
  // so b will be undefined

Standard和ESLint都不会在这里找到任何问题。 是否可以使用良好的代码质量工具检测它?

举个例子,IDEA / Webstorm正在正确报告问题 enter image description here

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

3 个答案:

答案 0 :(得分:1)

FlowTypeScript之类的静态类型检查程序旨在捕获此类错误。尝试在try Flow editorTypeScript playground中粘贴示例代码。在没有对代码进行任何修改以添加特定类型注释的情况下,两个检查器都会捕获错误。

Flow

4: const b = obj.a.c
                   ^ property `c`. Property not found in
4: const b = obj.a.c
             ^ object literal

TypeScript

Property 'c' does not exist on type '{ b: string; }'.

答案 1 :(得分:0)

在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

别忘了抓住你抛出的例外情况。如果您想定义自己的例外类型,则可以(请查看https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Objets_globaux/Error)。

答案 2 :(得分:0)

Javascript不是一种打字语言,因此在运行代码之前无法验证对象解构。

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