如何避免TypeScript中的虚假“未使用参数”警告

Dou*_*oug 5 javascript webstorm typescript tslint

我遇到了很多,并最终决定找出正确的方法。如果我有一个声明方法的抽象父类,然后某些具体的子类在其实现中实现了真正的逻辑(并且显然使用了方法参数),但是某些子类不需要在该方法中执行任何操作(因此请不要使用方法参数)-无需执行任何操作的操作会在我的代码中生成虚假(在我看来)警告。

例如,如果我有一些类似的类:

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
  }
}
Run Code Online (Sandbox Code Playgroud)

然后,对于该BadChild tellThemToDoSomethign()方法中未使用的参数,我在WebStorm中收到了(TSLint?JSLint?WebStorm?)警告。

我知道一些选择,但似乎都没有。

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中编码的时间不够长,无法感觉到此警告上的理想刻度盘应该是什么。

Est*_*ask 7

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

TypeScript 正确处理的一种常规方法是在未使用的参数下划线。不幸的是,JetBrains IDE 不支持此约定。

在某些情况下,可以通过使用/触发建议列表并选择Suppress for statement抑制就地检查(这对我来说从来没有用于 IDE 检查)。Alt+Enter?+Enter

可以在检查结果中抑制检查

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

// noinspection JSUnusedLocalSymbols
tellThemToDoSomething(_command: string) {}
Run Code Online (Sandbox Code Playgroud)

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