Comprendo que esto es un debate antiguo, pero aún podría ser útil para compartir mi solución al problema de las variables supuestamente privados y métodos en un texto mecanografiado "fuga" hacia fuera en la interfaz pública de la clase de JavaScript compilado.
Para mí este tema es puramente cosmética, es decir, se trata de la confusión visual cuando una variable de instancia se ve en DevTools. Mi solución es agrupar las declaraciones privadas dentro de otra clase que se crea una instancia luego en la clase principal y se asigna a un private(pero todavía visibles públicamente en JS) variable con un nombre como __(subrayado doble).
Ejemplo:
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);
Cuando el myClassejemplo se ve en DevTools, en lugar de ver todos sus miembros "privadas" entremezclados con los verdaderamente públicos (que puede llegar a estar muy desordenado visualmente en el código de la vida real adecuadamente refactorizado) se les ve perfectamente agrupados dentro de la colapsada __propiedad:
