Jeg skjønner at dette er en eldre diskusjon, men det kan likevel være nyttig å dele min løsning på problemet med de angivelig private variabler og metoder i en Loggfila "lekker" ut i det offentlige grensesnittet til kompilert Javascript klassen.
For meg er dette problemet er rent kosmetisk, det vil si det handler om det visuelle rot når en instansvariabel er sett i DevTools. Min løsning er å gruppere private erklæringer sammen inne i en annen klasse som deretter startes i hovedklassen og tildelt en private(men fortsatt offentlig synlig i JS) variabel med et navn som __(dobbel understrek).
Eksempel:
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år myClassforekomsten er sett i DevTools, i stedet for å se alle sine "private" medlemmer blandet med virkelig offentlige de (som kan få svært visuelt rotete i riktig refactored real-life code) du ser dem pent gruppert inne kollapset __eiendom:
