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
Genérico debe ser una clase de salida en mecanografiado en el método de fábrica

Me gustaría pasar un genérico para poder escribir previamente mi clase devuelta.

 public createVehicle<O extends AbstractVehicle>( type: string ): O { switch (type) { case "Car": return new Car(param1, param2); case OfferType.Sale: return new Bike(param3, param4) default: throw new Error("Vehicle type not supported"); } }

sin embargo esto me da:

 Type 'Car' is not assignable to type 'O'. 'Car' is assignable to the constraint of type 'O', but 'O' could be instantiated with a different subtype of constraint 'AbstractVehicle'

lo cual entiendo, ya que puede ser algo como AbstractVehicle & {} , pero ¿no debería ser algo fácil de hacer?

Intenté durante horas sin solución, sigue arrojando ese error. ¿Alguna sugerencia para mantener esto simple y legible?

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

0

Su función no es genérica sobre su tipo de retorno. solo debes escribir

 createVehicle(type: string): Car | Bike

o

 createVehicle(type: string): AbstractVehicle

y llámelo como createVehicle("Car") as Car not createVehicle<Car>("Car") .

En todo caso, su función es genérica sobre su tipo de argumento, y puede inferir el tipo de retorno de eso:

 public createVehicle<T extends "Car" | "Bike">(type: T): T extends "Car" ? Car : T extends "Bike" ? Bike : never

Esto inferirá el tipo de resultado correcto para la llamada createVehicle("Car") (es decir typeof createVehicle<"Car">("Car") = Car ), pero para createVehicle(unknownType) seguirá infiriendo la unión.

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