por qué los creadores del comstackdor de TypeScript no convirtieron la class en el cierre de JavaScript que hace que las variables sean privadas

¿Por qué dejó el comstackdor typescript para convertir las classs en cierre para lograr ocultar los datos?

class Person { public name: string; private password: string; constructor(name:string,password: string) { this.name = name; this.password= password; } } let p = new Person("mihir","!@#123"); 

En el código anterior, conservé la contraseña como variable privada. Por lo tanto, no deberíamos acceder a esa variable directamente. el siguiente código se comstack a partir del código de mecanografía. la variable de contraseña permanece pública ya que no tenemos modificador de acceso en javascript.

 var Person = (function () { function Person(name,password) { this.name= name; this.password= password; } return Person; })(); var p = new Person("mihir","!@#123"); 

De acuerdo con el siguiente código, la variable de cierre puede protegerse desde afuera.

 var Person = (function () { var _pass; function Person(name,password) { this.name = name; _pass = password; } return Person; })(); 

Entendemos que la encapsulación de datos es aplicable en mecanografía, y el objective de Typescript es escribir código más productivo que javascript.

Entonces, ¿por qué el typescript dejó el código de conversión para el cierre? por qué dejó oculta la información en el código comstackdo, ya que puede implementarse por cierre.

Al final, sin javacsript, no puede haber text typescript. Entonces, ¿había complejidad para que el comstackdor lograra ocultar los datos en el código comstackdo?

He encontrado algunas cosas que supongo que dejaron de pensar en creadores de comstackdores typescripts para convertir la class en javascript closure para hacer una variable privada.

1) Si usamos el siguiente código para mantener la variable privada

 var Person = (function () { var _pass; function Person(name,password) { this.name = name; _pass = password; } Person.prototype.getPassword = function() { return _pass; } return Person; })(); var p1 = new Person("mihir","!@#123"); var p2 = new Person("khushbu","!@#345"); console.log(p1.getPassword()); // '!@#345' console.log(p2.getPassword()); // '!@#345' 

En el ejemplo anterior _pass se comporta como static.since _pass no está asignado al constructor, cada vez que crea un nuevo object, la contraseña del nuevo object anula la contraseña del object anterior. Por lo tanto, esto funciona solo para un solo object. Y esa es la peor práctica.

2) Mover todo al constructor

 var Person = (function () { function Person(name, password) { var _pass = password; this.name = name; this.getPassword = function () { return _pass; } } return Person; })(); var p1 = new Person('mihir','!@#123'); var p2 = new Person('khushbu','!@#456'); console.log(p1.getPassword()); // '!@#123' console.log(p2.getPassword()); // '!@#456' 

Pero de nuevo, esta es una mala idea para mover todo al constructor, lo que da como resultado una degradación del performance. Mejor no implementar el ámbito de variable privado en javascript.

Entonces, para hacer uso de creadores de comstackdores typescripts prototipo de model, se dejó la idea de implementar el ámbito privado.

Todo desarrollador de javascript debe hacer uso del prefijo de subrayado a las variables "privadas" que notifican al consumidor de su código que "lo utiliza bajo su propio riesgo". Y haga un alto completo para usar una variable privada en javascript.