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

156
Vistas
¿Clase Typescript Factory que evita usar una declaración de cambio cuando se usa enumeración como entrada?
abstract class Animal { abstract sound(): void; } class Cat extends Animal { sound(){ console.log("meow"); } } class Dog extends Animal { sound(){ console.log("bark"); } } enum AnimalType { Cat = 1, Dog = 2, } class AnimalFactory { static createAnimal(type: AnimalType): Animal { switch (type) { case AnimalType.Cat: return new Cat(); case AnimalType.Dog: return new Dog(); default: throw new Error("unsupported animal type"); } } } const cat = AnimalFactory.createAnimal(AnimalType.Cat); const dog = AnimalFactory.createAnimal(AnimalType.Dog); cat.sound(); dog.sound();

Enlace del patio de recreo

Estoy tratando de mejorar en el principio abierto-cerrado y estoy tratando de descubrir cómo evitar el uso de declaraciones de cambio y desacoplar la clase de fábrica con la enumeración cuando agrego más subclases de Animal. El usuario a través de una API está enviando qué animal se creará a través de una enumeración simple. ¿Es posible modificar AnimalFactory de manera que no necesite modificar la clase de fábrica cada vez que agrego otro valor de enumeración y subclase de Animal?

¿Me equivoco y necesito más que una enumeración para usar como argumento?

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

0

Puede definir una constante que contenga una asignación de valores de enum a tipos de clase y usar un tipo asignado para crear una asignación de tipos:

 abstract class Animal { abstract sound(): void; } class Cat extends Animal { sound() { console.log("meow"); } } class Dog extends Animal { sound() { console.log("bark"); } } enum AnimalType { Cat = 1, Dog = 2, } const animals = { [AnimalType.Cat]: Cat, [AnimalType.Dog]: Dog }; type Animals = { [A in keyof typeof animals]: InstanceType<typeof animals[A]> }; class AnimalFactory { static createAnimal<A extends keyof Animals>(type: A): Animals[A] { return new animals[type](); } } const cat = AnimalFactory.createAnimal(AnimalType.Cat); const dog = AnimalFactory.createAnimal(AnimalType.Dog); cat.sound(); dog.sound();

Véalo en el patio de recreo

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