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

160
Vistas
¿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 Respuestas
Responde la pregunta

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 Denunciar

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 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