Ik besef dat dit is een oudere discussie maar het kan nog steeds nuttig zijn om mijn oplossing voor het probleem van de zogenaamde private variabelen en methoden in een schrijfmachine te delen "lekken" uit in de openbare interface van de gecompileerde JavaScript-klasse.
Voor mij is dit probleem is puur cosmetisch, dat wil zeggen het is allemaal over de visuele rommel wanneer een instantie variabele wordt gezien in DevTools. Mijn oplossing is om prive groep verklaringen bij elkaar in een andere klasse die vervolgens wordt geconcretiseerd in de hoofdklasse en toegewezen aan een private(maar nog steeds voor iedereen zichtbaar in JS) variabele met een naam als __(dubbele underscore).
Voorbeeld:
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);
Wanneer het myClassbijvoorbeeld wordt gezien in DevTools, in plaats van het zien van al zijn "privé" leden vermengd met echt publiek degenen (die kan erg visueel rommelig in de juiste refactored real-life code) zie je ze netjes gegroepeerd in het ingestorte __pand:
