Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

213
Views
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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!