@typescript-eslint/no-unused-private-class-members

Disallow private class members that are never used

Also called typescript-eslint/no-unused-private-class-members, typescript/no-unused-private-class-members

Only the class itself can use its private members. If it never uses one, that member is dead code, often left behind after a refactor.

The rule checks #private members, members marked private, and private parameter properties. A field that's only assigned to, or only changed with += or ++, counts as unused, because nothing ever reads the value.

Configure#

Off by default. To turn it on:

bunfig.toml
[lint.rules]
"@typescript-eslint/no-unused-private-class-members" = "error" # or "warn"

Examples#

example.ts3 problems
class Cache {
  #size = 0;
  private hits = 0;

  constructor(private limit: number) {}

  add() {
    this.hits += 1;
  }
}
example.tsNo problems
class Cache {
  #size = 0;
  private hits = 0;

  constructor(private limit: number) {}

  add() {
    this.hits += 1;
    return this.#size < this.limit ? this.hits : 0;
  }
}

A private setter can run code, so assigning to it counts as a use:

example.tsNo problems
class Cache {
  set #limit(value: number) {
    console.log("limit is now", value);
  }

  reset() {
    this.#limit = 0;
  }
}