导致eslint无阴影错误的结构化参数

时间:2017-06-08 20:36:28

标签: javascript ecmascript-6 eslint destructuring

我的理解是这样解构从传入的参数对象中选择属性:

const last = "Smith" // unrelated const

const full = function({ first, last }) {
  return [first, last].filter(v => v).join(" ")
}

full({last: "Doe"}) // "Doe"
full({}) // ""

对于进口来说,这似乎也是一样的。

import last from "last"; // unrelated import

export function full({ first, last }) {
  return [first, last].filter(v => v).join(" ")
}

full({last: "Doe"}) // "Doe"
full({}) // ""

为什么这会导致no-shadow夹板错误?

  

错误'last'已在较高范围无阴影

中声明

是否有full可以访问外部参考的情况?没有权利?如果不重命名不相关的外last引用,我怎么能保持语法接近呢?

1 个答案:

答案 0 :(得分:4)

它导致了一个eslint错误,因为last在导入中声明,在函数中声明为参数。因此,在函数内部,参数last正在影响导入last。您只需更改函数内部参数的名称或关闭eslint。

import last from "last"; // unrelated import

export function full({ first, last: lst }) {
  return [first, lst].filter(v => v).join(" ")
}

full({last: "Doe"}) // "Doe"
full({}) // ""

...或...

import last from "last"; // unrelated import

export function full({ first, last }) { // eslint-disable-line no-shadow
  return [first, last].filter(v => v).join(" ")
}

full({last: "Doe"}) // "Doe"
full({}) // ""