Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

215
Vistas
En Typescript, ¿por qué necesito declarar una propiedad fuera del constructor de la clase, a diferencia de Javascript, donde no necesitaría hacerlo?

En Javascript podría crear una clase como la siguiente, lo que significa que no necesitaría declarar e iniciar una propiedad llamada logs fuera del constructor:

 class Logger { constructor() { this.logs = []; } }

Sin embargo, en mecanografiado me daría un error: Property 'logs' does not exist on type 'Logger'.ts(2339) Para arreglarlo, declaré una propiedad logs como esta: logs: Array<any>; El pseudocódigo en Typescript sin errores se ve así:

 class Logger { logs: Array<any>; constructor() { this.logs = []; } }

Esta es probablemente una pregunta de principiantes de TypeScript. Sin embargo, busqué en los documentos y otros recursos y no pude encontrar una explicación. Como sé cómo solucionarlo, estoy más interesado en la explicación, las diferencias y las mejores prácticas.

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

El "por qué" es complicado. Hay dos partes en esta pregunta.

1. ¿Por qué se necesita una definición de tipo?

VLAZ ya lo ha cubierto en su comentario. TypeScript no tiene suficiente para inferir el tipo, por lo que necesita una guía más explícita.

"¡Seguramente TS puede darse cuenta de que es una matriz!", Eso es cierto, sin embargo...

2. ¿Por qué se necesita la definición de tipo en la parte superior?

El constructor en este caso confunde las cosas, pero tomemos una clase ligeramente diferente:

 class Logger { a() { this.logs = 1234; } b() { this.logs = ['a', 'b'] } }

De lo anterior, ¿qué tipo son los logs ? depende verdad? Si a() se llama primero, entonces es un número; de lo contrario, es una matriz. "depende" no es lo suficientemente bueno para darnos una fuerte confianza en nuestros tipos. Entonces (creo) Typescript lo obliga a declararlo en un lugar central: la parte superior de la clase, fuera de cualquier método.

También puede preguntar por qué no se puede inferir del constructor. Eso siempre vendría antes a() o b() .

Sospecho que está relacionado con el hecho de que los campos se pueden configurar durante su declaración, como:

 class Logger { logs: Array<string> = ['a', 'b']; constructor() { this.logs = 6611; // <-- wait a second... } }
about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda