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

162
Visualizações
¿Cómo escribir mecanografiado con función de constructor/nueva palabra clave?

Este es un ejemplo de los documentos de MDN para el uso de una new palabra clave

 function Car(make, model, year) { this.make = make; this.model = model; this.year = year; } const car1 = new Car('Eagle', 'Talon TSi', 1993);

Creo que la versión TS de la función sería:

 /* car type */ type CarDetails = { make: string; model: string; year: number; } /* setting this to type CarDetails */ function Car(this:CarDetails, make: string, model:string, year:number) { this.make = make; this.model = model; this.year = year; }

Esto me da intellisense/autocompletar mientras escribo el método, pero ¿cómo hago que TS infiera tipos al crear una instancia con una new palabra clave? Incluso después de mecanografiar el método, crear una instancia como esta:

 const car1 = new Car('Eagle', 'Talon TSi', 1993);

todavía mantiene car1 como tipo any

¿Cómo hacer que el tipo de car1 deduzca que es this tipo del método Car ?

(sin establecer explícitamente el tipo para el objeto de instancia, const car1: CarDetails = new Car(...; )

about 4 years ago · Juan Pablo Isaza
2 Respostas
Responde à pergunta

0

Podrías usar clases en su lugar:

 class Car { make: string; model: string; year: number; constructor(make: string, model: string, year: number) { this.make = make; this.model = model; this.year = year; } } // usage is the same const car1 = new Car('Eagle', 'Talon TSi', 1993);

about 4 years ago · Juan Pablo Isaza Relatório

0

Obviamente, la sintaxis de clase debería ser el camino a seguir, pero como usted, también estoy corriendo en círculos tratando de encontrar la solución correcta que genere la antigua sintaxis JS válida. Esta es una buena aproximación que encontré en esta respuesta aleatoria y está mal explicada en la documentación oficial de Typescript . Aquí está la parte relevante que he modificado para mejorarla:

 // Only instance members here. export interface Circle { // Name the interface with the same than the var. radius: number; area: () => number; perimeter: () => number; } // You could define static members here. interface CircleConstructor { new(radius: number): Circle; } export const Circle = function(this: Circle, radius: number) { const pi = 3.14; this.radius = radius; this.area = function () { return pi * radius * radius } this.perimeter = function () { return 2 * pi * radius; } } as unknown /*as any*/ as CircleConstructor; // Note the trust-me casting const c = new Circle(3); // okay

Esto viene con algunos problemas. Por ejemplo, el hecho de que esté usando any tipo que esté prohibido o el uso necesario del operador as que es megafeo. Como mejora, he usado unknown en lugar de any , pero el problema central permanece. Esto hace que la herramienta de pelusa no se queje, por lo que es una gran mejora con respecto a any .

Esta es la mejor solución que he encontrado hasta ahora. Los desarrolladores de mecanografiados son conscientes de esto, pero han decidido no proporcionar soporte para este tipo de "sintaxis".

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