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

236
Vistas
Activar tipos en una fábrica en typecipt

Digamos que tengo una clase base A y A1, A2, A3 todas se extienden a A. Creo una clase de fábrica, digamos, FactoryForA que implementa un método, digamos getObject como

 getObject(typeToSwitch) { case A1: // return an object of A1 case A2: // return an object of A2 case A3: // return an object of A3 }

Estoy buscando una manera de hacer que el tipo de argumento typeToSwitch seguro.

over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

Mi enfoque sería usar la palabra clave infer typescript para devolver el tipo solicitado. Algo como lo siguiente:

 class A { public getA = () => {} } class A1 extends A { constructor() { super(); } public getA = () => { return 'A1'; } } class A2 extends A { constructor() { super(); } public getA = () => { return 'A1'; } } // get the key map types ( a1 and a2 ) type Keys = keyof typeof FactoryA.AMap; // get the classes types type aTypes = typeof FactoryA.AMap[Keys]; // build the return type with generics type ClassInstanceType<T> = T extends new () => infer R ? R : never; class FactoryA { public static AMap = { a1: A1, a2: A2 }; public static getObject = (typeToSwitch: Keys ): ClassInstanceType<aTypes> => { return new FactoryA.AMap[typeToSwitch](); } } const a1instance: A1 = FactoryA.getObject('a1'); console.log(a1instance.getA());
over 4 years ago · Santiago Trujillo Denunciar

0

Lo que se me ocurrió es getObject<T extends new(...args: any[]) => A>(typeToSwitch: T) .

Dice que T es algo que extiende A y es construible, por lo que nos permite usar un tipo como valor (todavía tengo que entender por qué). Además getObject(T extends A) no funciona (por qué solo se admite un tipo construible).

Si alguien tiene sugerencias o explicaciones, actualice la respuesta o el comentario.

Aquí hay un enlace a un ejemplo de lo que dije anteriormente.

over 4 years ago · Santiago Trujillo 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