如果我没有将所有参数传递给方法,任何有eslint的方法都会警告我吗?

时间:2017-09-14 21:31:31

标签: javascript eslint

如果我调用函数或方法而没有提供所有参数,有没有办法让ESLint发出警告/错误?

我知道JS将缺失的参数视为未定义,但如果我的参数少于预期,则会发出警告非常有用。

2 个答案:

答案 0 :(得分:2)

对于在线找到此答案的任何人,虽然ESLint无法做到这一点,但实际上在VSCode中可以通过启用一个将TypeScript检查应用于您的js的选项来实现。

在设置中,将javascript.implicitProjectConfig.checkJs设置为true 为了使这项工作,你必须在你想要验证的方法上面添加一个JSDoc注释,然后如果你没有传递正确数量的参数,VSCode会发出警告。

有趣的是,JSDoc实际上并不需要引用所有参数,它只需要存在并且其中至少有一个@param

例如,以下内容足以在VSCode中生成警告

/** @param param */
function myFunc(x, y, z){}

myFunc(1); //VSCode will provide a warning on this call

注意这只有在Intellisense可以找到文件的情况下才有效 - 在某些情况下,VSCode可能会有点笨拙,在这种情况下它会从所需的模块中获取/不会从中获取,所以在它没有的情况下正确解析所需的模块,这不会起作用(因为Intellisense无法获得JSDoc评论)。 有关此here

的GitHub问题

修改

如果JSDoc注释中指定的参数与方法声明中的特定参数不匹配,则VSCode的后续版本(1.17+ I think )将引发错误。 如果任何参数错误,您仍然只需要声明一个VSCode警告的参数,但必须将其命名为与其中一个实际参数相同。 更新的示例:

/** @param x */
function myFunc(x, y, z){}

myFunc(1); //VSCode will provide a warning on this call

答案 1 :(得分:1)

current ESLint rules没有提供这样的选项,原因很简单 - 根据您的其他规则和代码,很可能无法静态地确定传递的参数数量是否正确。登记/> 请参阅以下简单示例:

let foo = n => n * n;
if (someExternalCondition) {
  foo = (n, m) => n * m;
}
// What should ESLint do here?
foo(42);