【发布时间】:2018-10-20 07:37:18
【问题描述】:
我遇到了很多,最后决定找出正确的方法是什么。如果我有一个抽象的父类声明了一个方法,然后一些具体的子类在它们的实现中实现了真正的逻辑(并且,显然,使用了方法参数),但是一些子类不需要在那个方法中做任何事情(所以不要使用方法参数)——那些不需要做任何事情的人会在我的代码中产生虚假的(在我看来)警告。
例如,如果我有一些看起来像这样的类:
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() 方法中未使用的参数。
我知道一些选择,但似乎没有一个很好。
1) 忽略它(但这似乎不是最理想的,因为我会对真正的警告视而不见)
2) 从 BadChild 的方法实现中删除参数(但不幸的是,这会删除有用的信息,因为我以后可能想要实现它,并且没有签名会使其变得更加困难,而且我也会收到来自期望那里的调用者的错误成为参数 - 虽然我应该能够在 JavaScript 中调用带有无关参数的方法,但我有办法解决这个问题)
3) 告诉 WebStorm(TSLint) 停止对未使用的参数发出警告(但这似乎不是最理想的,因为在其他实际问题情况下我不会收到警告)
4) 对参数做一些无意义的事情,这样它就不会被使用(显然不是很好)
有经验的 Java/TypeScript 编码员在这种情况下会做什么?有没有一种简单的方法可以告诉 WebStorm/TSLint 在个别情况下忽略该参数?或者,更好的方法是告诉它忽略抽象方法的子类实现中未使用的参数,只要某些实现实际使用参数?
不过,我有点不确定警告的来源,因为我的简短谷歌搜索显示未使用变量但未使用参数的 TSLint 警告,并且添加 // tslint:ignore-next-line:no-unused-parameter(或 no-unused-variable)并没有不要让警告消失。所以我想警告可能来自 WebStorm 本身?此外,警告是“未使用的参数 Foo:检查要在给定文件范围内使用的 JavaScript 参数、局部变量、函数、类和私有成员声明”。所以它看起来不像 TSLint 警告。如果我查看我的 WebStorm Preferences -> Languages & Frameworks -> Javascript -> Code Quality Tools,则没有启用任何 linter(JSLint、JSHint、ESLint 等)。那么知道错误来自哪里吗?
我使用 TypeScript 编码的时间还不够长,无法了解此警告上的理想刻度盘应该是什么。
【问题讨论】:
-
您只能删除当前文件的警告。把它放在文件的开头。
/* tslint:disable:no-unused-variable */ -
这会导致掩盖其他(可能)真正的警告,不是吗?
-
这只会禁用该文件的警告。但是,如果您在文件的其余部分中需要它们,您可以将其放在课程
BadChild之前,并在课程之后使用/* tslint:enable:no-unused-variable */重新启用它 -
这似乎是很多笨拙的评论。人们真的会这样做吗?还是他们只是忽略了这些警告?
-
另外 - 查看我最近的编辑 - 我不确定这是 TSLint 警告。
标签: javascript typescript webstorm tslint