deny-soft-private-modifier
Dieses Plugin verbietet den nur zur Kompilierzeit wirksamen private-Modifikator.
- ⭐️ Diese Regel ist in der Flat Config
rdlabo.configs.recommendedenthalten.- ✒️ Die Option
--fixauf der Befehlszeile kann einige der von dieser Regel gemeldeten Probleme automatisch korrigieren.
Der TypeScript-Modifikator private wird nur zur Kompilierzeit durchgesetzt. Zur Laufzeit kann weiterhin per Klammernotation oder durch einen Cast zu any darauf zugegriffen werden. Tatsächlich private JavaScript-Felder (#) werden zur Laufzeit durchgesetzt und lassen sich von außerhalb der Klasse nicht umgehen. Diese Regel ersetzt private-Properties und -Methoden durch #-Felder und passt Referenzen von this.x auf this.#x an.
Einzelheiten der Regel
Diese Regel prüft Klassen auf folgende Muster:
- Eine
private-Property-Definition (private field = ...) - Eine
private-Methodendefinition (private method() { ... }) - Eine Referenz
this.field, bei derfieldalsprivatedeklariert wurde
Sie meldet Konstruktoren nicht, da private constructor() eine andere Bedeutung hat: Es verhindert externe Instanziierung. Eine Property mit private readonly wird gemeldet. Die Korrektur entfernt private, ergänzt # und erhält readonly.
Die automatische Korrektur der Regel führt Folgendes aus:
- Sie entfernt das Schlüsselwort
private. - Sie fügt
#vor dem Property- oder Methodennamen ein. - Sie ändert alle Referenzen
this.fieldoderthis.method()innerhalb der Klasse inthis.#fieldoderthis.#method().
Beispiele
Inkorrekt
class TokenStore {
private token = '';
private refresh() {
this.token = 'new-token';
}
}
Korrekt
class TokenStore {
#token = '';
#refresh() {
this.#token = 'new-token';
}
}
Optionen
Diese Regel besitzt keine Optionen.
Wann die Regel aktiviert werden sollte
Aktivieren Sie diese Regel, wenn ein Projekt zur Laufzeit durchgesetzte Kapselung für Klasseninterna verlangt. Sie lässt sich mit --fix auf bestehendem Code ausführen, verändert jedoch die öffentliche API-Oberfläche: Code, der zur Laufzeit auf lediglich zur Kompilierzeit geschützte private-Member zugegriffen hat, funktioniert danach nicht mehr.