我遇到过很多次这种情况,最后决定弄清楚正确的方法是什么。如果我有一个声明方法的抽象父类,然后一些具体子类在其实现中实现真正的逻辑(并且显然使用方法参数),但某些子类不需要在该方法中执行任何操作(因此不要使用方法参数) - 那些不必执行任何操作的方法会在我的代码中生成虚假的(在我看来)警告。
例如,如果我有一些如下所示的类:
abstract class Child {
constructor(protected name: string) {
connsole.log(name + " was just born.");
}
abstract tellThemToDoSomething(command: string);
}
class GoodChild extends Child {
constructor(name: string) { super(name); }
tellThemToDoSomething(command: string) {
console.log("I will do " + command);
}
}
class BadChild extends Child {
constructor(name: string) { super(name); }
tellThemToDoSomething(command: string) {
// bad children just ignore what their parents tell them
}
}
然后我在 WebStorm 中收到一个 (TSLint? JSLint? WebStorm?) 警告,提示未使用参数BadChild
tellThemToDoSomethign()
method.
我知道一些选择,但似乎没有一个很好。
1)忽略它(但这似乎不是最理想的,因为我会对真正的警告视而不见)
2)从BadChild的方法实现中删除参数(但不幸的是,这删除了有用的信息,因为我稍后可能想要实现它,并且那里没有签名会使它变得更加困难,而且我还从期望有参数的调用者那里得到错误- 虽然考虑到我应该能够在 JavaScript 中调用带有无关参数的方法,但我有办法解决这个问题)
3)告诉WebStorm(TSLint)停止对未使用的参数发出警告(但这似乎不是最理想的,因为我在其他实际问题情况下不会收到警告)
4)对参数做一些无意义的事情,这样它就不会被使用(显然不是很好)
在这种情况下,经验丰富的 Java/TypeScript 程序员会做什么?有没有一种简单的方法可以告诉 WebStorm/TSLint 在像这样的个别情况下忽略参数?或者,更好的是,有一种方法告诉它忽略抽象方法的子类实现中未使用的参数,只要某些实现实际上使用了这些参数?
不过,我有点不确定警告来自哪里,因为我简短的谷歌搜索显示了针对未使用变量但未使用参数的 TSLint 警告,并添加了// tslint:ignore-next-line:no-unused-parameter
(or no-unused-variable
)并没有使警告消失。所以我猜这个警告可能来自 WebStorm 本身?此外,警告是“未使用的参数 Foo:检查要在给定文件范围内使用的 JavaScript 参数、局部变量、函数、类和私有成员声明”。所以它看起来不像 TSLint 警告。如果我查看我的 WebStormPreferences -> Languages & Frameworks -> Javascript -> Code Quality Tools
,没有启用任何 linter(JSLint、JSHint、ESLint 等)。那么知道错误来自哪里吗?
我使用 TypeScript 编写代码的时间还不够长,无法了解此警告的理想表盘应该是什么。