跳至主要内容

class-methods-use-this

强制类方法使用this

此规则扩展了基本 eslint/class-methods-use-this 规则。它添加了对忽略override方法或实现接口的类上的方法的支持。

使用方法

.eslintrc.cjs
module.exports = {
"rules": {
// Note: you must disable the base rule as it can report incorrect errors
"class-methods-use-this": "off",
"@typescript-eslint/class-methods-use-this": "error"
}
};

在游乐场中尝试此规则 ↗

选项

参见 eslint/class-methods-use-this 选项.

此规则添加了以下选项

interface Options extends BaseClassMethodsUseThisOptions {
ignoreOverrideMethods?: boolean;
ignoreClassesThatImplementAnInterface?: boolean | 'public-fields';
}

const defaultOptions: Options = {
...baseClassMethodsUseThisOptions,
ignoreOverrideMethods: false,
ignoreClassesThatImplementAnInterface: false,
};

ignoreOverrideMethods

使规则忽略任何明确标记为override的类成员。

ignoreOverrideMethods设置为true时的正确代码示例

class X {
override method() {}
override property = () => {};
}
在游乐场中打开

ignoreClassesThatImplementAnInterface

使规则忽略在implements类型的类中定义的类成员。如果指定,它可以是

  • true: 忽略所有实现接口的类
  • 'public-fields': 仅忽略实现接口的类的公共字段

重要的是要注意,此选项不仅适用于在接口中定义的成员,因为这将需要类型信息。

true

ignoreClassesThatImplementAnInterface设置为true时的正确代码示例

class X implements Y {
method() {}
property = () => {};
}
在游乐场中打开

'public-fields'

ignoreClassesThatImplementAnInterface设置为'public-fields'时的错误代码示例

class X implements Y {
method() {}
property = () => {};

private privateMethod() {}
private privateProperty = () => {};

protected privateMethod() {}
protected privateProperty = () => {};
}
在游乐场中打开

何时不使用它

如果您的项目以 TypeScript 难以建模的方式动态更改this范围,则此规则可能不可行。您可能考虑使用 ESLint 禁用注释 针对这些特定情况,而不是完全禁用此规则。

资源

从 ❤️ 获取自 ESLint 核心.