Skip to main content

no-this-alias

Disallow aliasing this.

ESLint 配置 中扩展"plugin:@typescript-eslint/recommended" 可启用此规则。

将变量分配给 this 而不是正确使用箭头 lambda 可能是 ES6 之前的实践或范围管理不善的症状。

¥Assigning a variable to this instead of properly using arrow lambdas may be a symptom of pre-ES6 practices or not managing scope well.

eslint.config.mjs
export default tseslint.config({
rules: {
"@typescript-eslint/no-this-alias": "error"
}
});

在线运行试试这个规则 ↗

示例

¥Examples

const self = this;

setTimeout(function () {
self.doWork();
});
Open in Playground

选项

该规则接受以下选项:

type Options = [
{
/** Whether to ignore destructurings, such as `const { props, state } = this`. */
allowDestructuring?: boolean;
/** Names to ignore, such as ["self"] for `const self = this;`. */
allowedNames?: string[];
},
];

const defaultOptions: Options = [
{ allowDestructuring: true, allowedNames: [] },
];

¥Options

allowDestructuring

Whether to ignore destructurings, such as const { props, state } = this. Default: true.

有时,从类实例中解构属性可能很有用,例如在其方法之一中从实例中检索多个属性。allowDestructuring 允许这些解构,默认情况下为 true。你可以通过将 allowDestructuring 设置为 false 来明确禁止它们。

¥It can sometimes be useful to destructure properties from a class instance, such as retrieving multiple properties from the instance in one of its methods. allowDestructuring allows those destructures and is true by default. You can explicitly disallow them by setting allowDestructuring to false.

{ "allowDestructuring": false } 选项的代码示例:

¥Examples of code for the { "allowDestructuring": false } option:

class ComponentLike {
props: unknown;
state: unknown;

render() {
const { props, state } = this;

console.log(props);
console.log(state);
}
}
Open in Playground

allowedNames

Names to ignore, such as ["self"] for const self = this;. Default: [].

no-this-alias 也可以交替用于仅允许特定名称列表作为 this 别名。我们建议不要这样做,除非作为解决所有违规行为的临时步骤。

¥no-this-alias can alternately be used to allow only a specific list of names as this aliases. We recommend against this except as a transitory step towards fixing all rule violations.

{ "allowedNames": ["self"] } 选项的代码示例:

¥Examples of code for the { "allowedNames": ["self"] } option:

class Example {
method() {
const that = this;
}
}
Open in Playground

何时不使用它

¥When Not To Use It

如果你的项目的结构需要将 this 分配给变量,则此规则可能不适合你。如果只有项目的子集将 this 分配给变量,那么你可能考虑在特定情况下使用 ESLint 禁用注释,而不是完全禁用此规则。

¥If your project is structured in a way that it needs to assign this to variables, this rule is likely not for you. If only a subset of your project assigns this to variables then you might consider using ESLint disable comments for those specific situations instead of completely disabling this rule.

'## 资源'