如果我调用函数或方法而没有提供所有参数,有没有办法让ESLint发出警告/错误?
我知道JS将缺失的参数视为未定义,但如果我的参数少于预期,则会发出警告非常有用。
答案 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);