如何避免打字稿中未使用的参数出现虚假警告

2022-04-02 00:00:00 webstorm javascript 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
  }
}

然后我得到一个(TSLint?JSLint?WebStorm?)WebStorm中有关BadChildtellThemToDoSomethign()方法中未使用的参数的警告。

我知道有几个选择,但没有一个看起来很好。

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) {}

这可以添加到活动模板等。

相关文章