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

Posted

技术标签:

【中文标题】如何避免 TypeScript 中出现虚假的“未使用参数”警告【英文标题】:How to avoid spurious 'unused parameter' warnings in TypeScript 【发布时间】: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 警告。 【参考方案1】:

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

TypeScript 正确处理的常规方式是underscore unused parameters。不幸的是,JetBrains IDE 不支持这种约定。

在某些情况下,可以通过 Alt+Enter/⌥+Enter 触发建议列表并选择 Suppress for statement 来suppress inspections in-place(这对我来说从来没有用于 IDE 检查)。

可以suppress inspections in inspections results。

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

// noinspection JSUnusedLocalSymbols
tellThemToDoSomething(_command: string) 

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

【讨论】:

这正是我想要的。谢谢!

以上是关于如何避免 TypeScript 中出现虚假的“未使用参数”警告的主要内容,如果未能解决你的问题,请参考以下文章

避免插入失败以避免虚假的自动增量

并行框架,避免虚假共享

如何在微信小程序虚拟定位

如何避免在 Typescript 中分布多个泛型类型参数?

Typescript - 如何避免在类型数组上重复相同的属性?

ruby 保留用户名列表,以避免与资源路径发生虚假URL冲突