Mi rendo conto che è una discussione più vecchio ma potrebbe ancora essere utile per condividere la mia soluzione al problema delle variabili apparentemente private e metodi in un dattiloscritto "fuoriuscita" fuori nella interfaccia pubblica della classe JavaScript compilato.
Per me la questione è puramente cosmetico, vale a dire che è tutta una questione di ingombro visivo quando una variabile di istanza viene visualizzato in DevTools. La mia soluzione è quella di raggruppare le dichiarazioni private insieme all'interno di un'altra classe che viene poi creata un'istanza nella classe principale e assegnato a una private(ma ancora visibile al pubblico in JS) variabile con un nome simile __(doppia sottolineatura).
Esempio:
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);
Quando l' myClassistanza viene visualizzato in DevTools, invece di vedere tutti i suoi membri "privati" mescolati con quelli veramente pubbliche (che può diventare molto disordinato visivamente in modo corretto refactoring del codice di vita reale) li vedi ordinatamente raggruppati all'interno della crollato __immobile:
