如何避免 TypeScript 中的虚假 'unused parameter' 警告

How to avoid spurious 'unused parameter' warnings in TypeScript

我遇到过很多这样的事情,最后决定弄清楚正确的方法是什么。如果我有一个抽象的父 class 声明了一个方法,然后一些具体的子 class 在它们的实现中实现了真正的逻辑(并且,显然,使用了方法参数),但是一些sub-classes 不需要在该方法中做任何事情(所以不要使用方法参数)——那些不需要做任何事情的人会在我的系统中产生虚假的(在我看来)警告代码。

例如,如果我有一些 class 看起来像:

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() 方法中未使用的参数。

我知道一些选项,但 none 看起来不错。

1) 忽略它(但这似乎不是最佳选择,因为我会对真正的警告视而不见)

2) 从 BadChild 的方法实现中删除参数(但不幸的是,这删除了有用的信息,因为我以后可能想实现它,并且没有签名会使它变得更加困难,而且我也会从调用者那里得到错误期望有参数——虽然考虑到我应该能够在 JavaScript 中调用带有无关参数的方法,但我有办法解决这个问题)

3) 告诉 WebStorm(TSLint) 停止对未使用参数的警告(但这似乎不是最佳选择,因为在其他实际问题情况下我不会收到警告)

4) 对参数做一些无意义的事情,这样它就不会被闲置(显然不是很好)

有经验的 Java/TypeScript 程序员在这种情况下会怎么做?有没有一种简单的方法可以告诉 WebStorm/TSLint 在像这样的个别情况下忽略该参数?或者,更好的是,告诉它忽略抽象方法的子 class 实现中未使用的参数,只要某些实现实际使用这些参数?

不过,我有点不确定警告的来源,因为我的简短谷歌搜索显示了针对未使用变量而非未使用参数的 TSLint 警告,并添加了 // tslint:ignore-next-line:no-unused-parameter(或 no-unused-variable) 并没有使警告消失。所以我想警告可能来自 WebStorm 本身?此外,警告是 "Unused parameter Foo: Checks JavaScript parameter, local variable, function, classes and private member declarations to be used in given file scope"。所以它看起来不像是 TSLint 警告。如果我查看我的 WebStorm Preferences -> Languages & Frameworks -> Javascript -> Code Quality Tools,none 的 linter 已启用(JSLint、JSHint、ESLint 等)。那么知道错误是从哪里来的吗?

我在 TypeScript 中编写代码的时间还不够长,无法了解此警告的理想表盘应该是什么。

此警告是由 JetBrains PhpStorm/WebStorm 检查引起的。

TypeScript 正确处理的传统方式是 underscore unused parameters。不幸的是,JetBrains IDEs 不支持此约定。

在某些情况下,可以 suppress inspections in-place 通过使用 Alt+Enter/⌥+Enter 触发建议列表并选择 Suppress for statement(这永远不会为我工作 IDE 检查)。

可以suppress inspections in inspections results

这会导致在方法上方添加注释并影响此方法签名中所有未使用的参数:

// noinspection JSUnusedLocalSymbols
tellThemToDoSomething(_command: string) {}

这可以添加到实时模板等。