Eslint,没有里面有 super() 的无用构造函数?

Nik*_*ili 0 javascript typescript eslint

代码:

  constructor(cdr: ChangeDetectorRef, inj: Injector) {
    super(cdr, inj);
  }
Run Code Online (Sandbox Code Playgroud)

埃斯林特:

 {
   ...
   overrides: {
      ...
      rules: {
        ...
        "@typescript-eslint/no-useless-constructor": "error",
        ...
      }
   }
}
Run Code Online (Sandbox Code Playgroud)

这条规则告诉我删除无用的 constructor ,但我必须在里面调用 super() 。

如何绕过此规则而不禁用或删除它?

Dom*_*nik 6

只需删除构造函数即可。如果您不再需要进一步使用,则无需定义它。对于您的扩展类,它与空构造函数相同。它没有用,因为它是由 JavaScript/TypeScript 自动处理的。请参阅文档

如果您不提供自己的构造函数,那么将为您提供默认构造函数。...如果您的类是派生类,则默认构造函数将调用父构造函数,并传递提供的任何参数。

所以派生类的构造函数必须包含 super 调用。但您不一定必须定义一个空的构造函数或仅super在内部(派生类)。除非您想添加更多或不同的签名。

如果您仍然想保留它,只需删除/禁用 linter 规则即可。

有一个警告需要知道:

此 lint 规则将报告其唯一目的是更改父构造函数的可见性的构造函数。-- TS 文档也可参见ES 文档

Angular 可能需要这个带有 super 调用的“无用”构造函数,例如 Injectable 和 Constructor(派生类)。这可能会导致错误:This constructor is not compatible with Angular Dependency Injection because its dependency at index 0 of the parameter list is invalid.在这种情况下,必须禁用 eslint 规则。