Cuando creamos factories (fábricas) en TypeScript utilizando generics, se hace necesario referirse al tipo de las clases mediante sus constructores.
function crear<T>(c: { new (): T }): T {
return new c();
}
const fecha = crear(Date);
console.log(fecha.toISOString());
Salida…
2021-04-15T12:55:46.506Z
Un ejemplo mas avanzado es el uso de la propiedad prototype
para inferir y restringir las relaciones entre la función constructor y el tipo de la instancia.
class Apicultor {
usaMascara: boolean;
}
class Zoologo {
nombre: string;
}
class Animal {
patas: number;
}
class Abeja extends Animal {
cuidador: Apicultor;
}
class Leon extends Animal {
cuidador: Zoologo;
}
function crearInstancia<A extends Animal>(c: new () => A): A {
return new c();
}
console.log(crearInstancia(Leon).cuidador.nombre);
console.log(crearInstancia(Abeja).cuidador.usaMascara);
Este patrón es utilizado por para dar lugar al patrón de diseño mixins.