Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

220
Visualizações
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 Respostas
Responde à pergunta

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda