typescript/no-extraneous-class 可疑
作用
当一个类没有任何非静态成员时,此规则会报告问题,例如仅被用作静态命名空间的类。此规则还会报告那些只有构造函数而没有字段的类。这类类通常可以用一个独立函数替代。
为什么这不好?
来自 OOP 范式的用户可能会把他们的工具函数再包一层类,而不是直接把它们放在 ECMAScript 模块的顶层。在 JavaScript 和 TypeScript 项目中,这样做通常是不必要的。
- 包装类会增加代码的额外认知复杂度,但不会带来任何结构上的改进
- 无论放在它们上面的是什么,例如工具函数,本来就因为位于模块中而已经组织好了。
- 作为替代,你可以使用
import * as ...来导入整个模块,从而将它们放进一个单独对象中。
- 当你开始输入属性名时,IDE 无法为静态类或命名空间导入的属性提供同样好的建议
- 当所有内容都放在类上时,对代码中的未使用变量等进行静态分析会更困难(参见:在 TypeScript 中查找死代码(以及死类型))。
此规则还会报告那些只有构造函数而没有字段的类。这类类通常可以用一个独立函数替代。
示例
此规则的错误代码示例:
ts
class StaticConstants {
static readonly version = 42;
static isProduction() {
return process.env.NODE_ENV === "production";
}
}
class HelloWorldLogger {
constructor() {
console.log("你好,世界!");
}
}
abstract class Foo {}此规则的正确代码示例:
ts
const version = 42;
const isProduction = () => process.env.NODE_ENV === "production";配置
此规则接受一个包含以下属性的配置对象:
allowConstructorOnly
type: boolean
default: false
允许只有构造函数的类。
allowEmpty
type: boolean
default: false
允许空类。
allowStaticOnly
type: boolean
default: false
允许只有静态成员的类。
allowWithDecorator
type: boolean
default: false
允许带有装饰器的类。
如何使用
To enable this rule using the config file or in the CLI, you can use:
json
{
"rules": {
"typescript/no-extraneous-class": "error"
}
}ts
import { defineConfig } from "oxlint";
export default defineConfig({
rules: {
"typescript/no-extraneous-class": "error",
},
});bash
oxlint --deny typescript/no-extraneous-class版本
此规则在 v0.7.0 中添加。
