Îmi dau seama că aceasta este o discuție mai veche, dar ar putea fi încă utilă pentru a partaja soluția mea la problema variabilelor presupuse private și metode într-o mașină de scris „scurgerea“ afară, în interfața publică a clasei JavaScript compilat.
Pentru mine această problemă este pur cosmetic, adică este vorba de dezordine vizual atunci când o variabilă instanță este vizualizat în DevTools. Fix mea este de declarații private de grup împreună într -o altă clasă , care este apoi instanțiat în clasa principală și atribuite unui private(dar încă vizibile în mod public în JS) variabilă cu un nume de genul __(subliniere dublă).
Exemplu:
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);
În cazul în care myClassinstanța este vizualizat în DevTools, în loc să vadă toți membrii săi „private“ cu adevărat cele amestecate publice (care se poate obține foarte vizual dezordonat în refactored corect codul de viața reală) pe care le vezi frumos grupate în interiorul prăbușită __proprietatea:
