Ich weiß, dies ist eine ältere Diskussion, aber es könnte noch nützlich sein, meine Lösung für das Problem der angeblich privaten Variablen und Methoden in einem Typoskript zu teilen in die öffentliche Schnittstelle der kompilierten JavaScript-Klasse „undicht“.
Für mich ist dieses Thema rein kosmetischer Natur, dh es ist alles über die visuelle Unordnung ist , wenn eine Instanz - Variable in DevTools betrachtet. Meine Lösung ist , zu einer Gruppe privater Erklärungen zusammen in einer anderen Klasse , die dann in der Hauptklasse instanziiert und zugeordnet zu einem private(aber immer noch öffentlich sichtbar in JS) Variable mit einem Namen wie __(Doppelstrich).
Beispiel:
class Privates {
readonly DEFAULT_MULTIPLIER = 2;
foo: number;
bar: number;
someMethod = (multiplier: number = this.DEFAULT_MULTIPLIER) => {
return multiplier * (this.foo + this.bar);
}
private _class: MyClass;
constructor(_class: MyClass) {
this._class = _class;
}
}
export class MyClass {
private __: Privates = new Privates(this);
constructor(foo: number, bar: number, baz: number) {
// assign private property values...
this.__.foo = foo;
this.__.bar = bar;
// assign public property values...
this.baz = baz;
}
baz: number;
print = () => {
console.log(`foo=${this.__.foo}, bar=${this.__.bar}`);
console.log(`someMethod returns ${this.__.someMethod()}`);
}
}
let myClass = new MyClass(1, 2, 3);
Wenn die myClasssich beispielsweise in DevTools betrachtet, statt dessen alles sehende „private“ Mitglieder vermischte mit wahrhaft öffentlichen diejenigen (die in richtig Refactoring realen Code optisch sehr unordentlich erhalten kann) man sieht sie ordentlich in der kollabierten gruppiert __Eigenschaft:
