Probablemente esto ya se haya hecho antes, ya que es una pregunta simple, pero buscar en Google cosas similares al título no me ha llevado a ninguna parte. No estoy seguro de cómo formular correctamente la pregunta, por lo que si alguien me pudiera hacer saber los términos correctos y un recurso que responda a la pregunta, eso también sería bueno.

En TypeScript, ¿cuál es la diferencia entre asignar a variables en el cuerpo de la clase, así:

export class Test1 {
  var1 = 5;
}

Y asignando los valores en el constructor, así:

export class Test2 {
  constructor() {
    this.var1 = 5;
  }

  var1: number;
}

¿Es una mejor práctica usar uno sobre el otro? ¿Hay ciertas situaciones en las que es necesario usar una sobre la otra?

0
avern 24 oct. 2017 a las 17:11

3 respuestas

La mejor respuesta

Echemos un vistazo al código JavaScript generado (sin minificación):

var Test1 = (function () {
    function Test1() {
        this.var1 = 5;
    }
    return Test1;
}());

var Test2 = (function () {
    function Test2() {
        this.var1 = 5;
    }
    return Test2;
}());

Es lo mismo

Siempre y cuando las variables de su instancia se asignen simplemente a tipos primitivos codificados, puede asignarlos de forma segura en el cuerpo de la clase. Si tiene una lógica complicada o si necesita que se inicialice una variable antes de iniciar otra, es mejor hacerlo en el constructor en aras de la claridad.

2
StephaneM 24 oct. 2017 a las 14:25

El código emitido para un inicializador de propiedad es solo una asignación al comienzo del constructor, por lo que son exactamente equivalentes en términos de características de tiempo de ejecución.

Probablemente sea mejor usar solo la sintaxis del inicializador cuando no haya dependencias entre las propiedades. TypeScript no impondrá ningún pedido en particular, ni reordenará los inicializadores por usted, por lo que escribir el código de inicialización en el constructor cuando haya un pedido obligatorio hará que sea más claro que los miembros no deben ser reordenados.

1
Ryan Cavanaugh 24 oct. 2017 a las 14:15

No hay diferencia entre esos dos, ya que lo que agregue como una variable id entró en el constructor, si ve su conversión de script java lo entenderá mejor.

Ejemplo en el patio de juegos mecanografiado

Y lo que es mejor, debe asignar la variable en el constructor, será asignable en tiempo de ejecución y también será mejor entenderlo.

0
Viplock 24 oct. 2017 a las 14:27