Zum Inhalt springen
rdlabo.devdocs

component-property-use-readonly

Warnt, wenn eine Property readonly sein sollte

  • ⭐️ Diese Regel ist in der Flat Config rdlabo.configs.recommended enthalten.
  • ✒️ Die Option --fix auf der Befehlszeile kann einige der von dieser Regel gemeldeten Probleme automatisch korrigieren.

Diese Regel verlangt den Modifikator readonly für von Angular-Komponenten deklarierte Properties, die keine Funktionen sind. Sie meldet initialisierte, nicht initialisierte, statische, berechnete, dekorierte, TypeScript-private und tatsächlich private Properties und kann readonly automatisch ergänzen.

Einzelheiten der Regel

Geprüft werden ausschließlich Klassen mit @Component(). Methoden, Getter, Setter, Arrow-Function-Properties, Function-Expression-Properties, bereits mit readonly versehene Properties und Properties anderer Klassen werden ignoriert.

Optionen

{
  "rules": {
    "@rdlabo/rules/component-property-use-readonly": [
      "error",
      {
        "ignorePrivateProperties": true
      }
    ]
  }
}

ignorePrivateProperties

  • Typ: boolean
  • Standard: false

Bei true werden mit dem TypeScript-Modifikator private deklarierte Properties und private ECMAScript-Properties mit # ignoriert. Öffentliche, geschützte und statische Properties werden weiterhin geprüft.

Beispiele

Inkorrekt

@Component({
  selector: 'app-example',
  template: '<div>example</div>',
})
export class ExampleComponent {
  x = 1;
  public y = 2;
  private z = 3;
  protected w = 4;
  #secret = 42;
  static a = 1;
  ['foo'] = 1;
  @Input() i = 8;
  h: number;
}

Korrekt

@Component({
  selector: 'app-example',
  template: '<div>example</div>',
})
export class ExampleComponent {
  readonly x = 1;
  public readonly y = 2;
  private readonly z = 3;
  protected readonly w = 4;
  readonly #secret = 42;
  static readonly a = 1;
  readonly ['foo'] = 1;
  @Input() readonly i = 8;
  readonly h: number;
}

Mit ignorePrivateProperties: true dürfen private Properties veränderlich bleiben:

@Component({
  selector: 'app-example',
  template: '<div>example</div>',
})
export class ExampleComponent {
  private privateProp = 1; // Kein Fehler
  #secretProp = 2; // Kein Fehler
  public readonly publicProp = 3;
}

Wann die Regel aktiviert werden sollte

Aktivieren Sie diese Regel, wenn Komponentenproperties stabile Referenzen bereitstellen sollen und veränderlicher Zustand über Signals oder ein ViewModel verwaltet wird.

Implementierung