跳至内容

typescript/no-extraneous-class 可疑的

作用

此规则报告没有非静态成员的类,例如用于专门作为静态名称空间的类。此规则还报告仅有构造函数而没有字段的类。这些类通常可以用独立函数来代替。

为什么不好?

可能来自面向对象范例的用户会将其实用程序函数包装在一个额外的类中,而不是将它们放在 ECMAScript 模块的顶层。在 JavaScript 和 TypeScript 项目中,通常不需要这样做。

包装类在不添加任何结构改进的情况下增加了代码的认知复杂性

放在它们身上的任何内容,例如实用程序函数,已经通过位于模块中而得到组织。

作为一种替代方案,你可以导入 * 作为…模块,以便将它们全部放入一个对象中。当你开始输入属性名称时,IDE 无法为静态类或名称空间导入的属性提供很好的建议

当所有内容都放在类上时,静态分析代码以查找未使用的变量等更加困难(请参阅:在 TypeScript 中查找死代码(和死类型))。

示例

ts
class StaticConstants {
  static readonly version = 42;

  static isProduction() {
    return process.env.NODE_ENV === "production";
  }
}

class HelloWorldLogger {
  constructor() {
    console.log("Hello, world!");
  }
}

abstract class Foo {}

参考

根据 MIT 许可发布。