如何避免打字稿中未使用的参数出现虚假警告
我遇到过很多这样的情况,最终决定找出正确的方法。如果我有一个声明方法的抽象父类,然后一些具体的子类在其实现中实现真正的逻辑(显然,使用方法参数),但一些子类不需要在该方法中做任何事情(所以不要使用方法参数)--那些不需要做任何事情的子类在我的代码中生成虚假的(在我看来)警告。
例如,如果我有一些如下所示的类:
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
}
}
然后我得到一个(TSLint?JSLint?WebStorm?)WebStorm中有关BadChild
tellThemToDoSomethign()
方法中未使用的参数的警告。
我知道有几个选择,但没有一个看起来很好。
1)忽略它(但这似乎不太理想,因为我会对真正的警告视而不见)
2)从BadChild的方法实现中删除参数(但不幸的是,这会删除有用的信息,因为我以后可能想要实现它,并且没有签名会使实现变得更加困难,而且我还会收到调用者的错误,因为调用者希望有参数-尽管考虑到我应该能够在JavaScript中调用带有无关参数的方法,我相信有一种方法可以绕过这个问题)
3)告诉WebStorm(TSLint)停止对未使用的参数发出警告(但这似乎不太理想,因为在其他实际问题情况下我不会收到警告)
4)对参数做一些没有意义的事情,这样它就不会被闲置(显然不是很好)
有经验的Java/TypeScrip程序员在这种情况下会做什么?在这种情况下,有没有简单的方法让WebStorm/TSLint忽略该参数?或者,更好的方法是告诉它忽略抽象方法的子类实现中未使用的参数,只要某些实现实际使用这些参数?
但是,我有点不确定警告来自哪里,因为我简短的Google搜索显示了一个针对未使用的变量但不是未使用的参数的TSLint警告,并且添加// tslint:ignore-next-line:no-unused-parameter
(或no-unused-variable
)并没有使警告消失。所以我猜这可能是来自WebStorm本身的警告?此外,警告是"未使用的参数foo:检查要在给定文件范围内使用的JavaScript参数、局部变量、函数、类和私有成员声明"。因此,它看起来不像是TSLint警告。如果我查看我的WebStormPreferences -> Languages & Frameworks -> Javascript -> Code Quality Tools
,没有一个链接器被启用(JSLint、JSHint、ESLint等)。那么你知道错误是从哪里来的吗?
我还没有在打字稿中编码足够长的时间,无法感觉到此警告上的理想拨号应该是什么。
解决方案
此警告是由JetBrains PhpStorm/WebStorm检查引起的。
由TypeScrip正确处理的常规方法是underscore unused parameters。不幸的是,JetBrains IDE不支持这一约定。在某些情况下,可以使用Alt+Enter
/⌥+Enter
触发建议列表,然后选择抑制FOR语句(这对我的IDE检查从来不起作用)。
可以suppress inspections in inspections results。
这会导致在方法上方添加注释,并影响此方法签名中所有未使用的参数:
// noinspection JSUnusedLocalSymbols
tellThemToDoSomething(_command: string) {}
这可以添加到活动模板等。
相关文章