Я понимаю, что это старая дискуссия, но она все еще может быть полезно разделить мое решение задачи о якобы частных переменных и методов в Машинопись «утечка» из в открытый интерфейс скомпилированного класса JavaScript.
Для меня этот вопрос чисто косметический, то есть это все о визуальных помехах , когда переменная экземпляра рассматриваются в Devtools. Моя починка группировать частные декларации вместе внутри другой класс , который затем конкретизируется в главном классе и присвоенный private(но по- прежнему общедоступны в JS) переменный с именем типа __(двойное подчеркиванием).
Пример:
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);
Когда myClassэкземпляр рассматриваются в Devtools, вместо того , чтобы видеть все свои «частные» член перемешанных с истинно казенными (которые могут получить очень визуально неаккуратны в правильно реорганизованных кодах реальной жизни) вы видите их аккуратно сгруппированы внутри сложенной __собственности:
