Las clases al igual que las interfaces, pueden ser genéricas. Cuando una clase es instanceada con el constructor new
, su tipo es inferido de la misma forma que cuando se llama a una función.
class Caja<T> {
contenido: T;
constructor(value: T) {
this.contenido = value;
}
}
type Juguete = {
nombre: string;
};
const misJuguetes: Juguete[] = [];
misJuguetes.push({ nombre: "Pelota" });
misJuguetes.push({ nombre: "Consola" });
const miCajaDeJuguetes: Caja<Juguete[]> = new Caja(misJuguetes);
type Maquillaje = {
nombre: string;
};
const miMaquillaje: Maquillaje[] = [];
miMaquillaje.push({ nombre: "Sombras" });
miMaquillaje.push({ nombre: "Labial" });
const miCajaDeMaquillaje: Caja<Maquillaje[]> = new Caja(miMaquillaje);
Las clases pueden utilizar restricciones y valores por default de la misma forma que las interfaces.
Types en parámetros de clases estáticas
El siguiente código generará un error…
class Caja<T> {
static valorPorDefault: T; // <- Static members cannot reference class type parameters.
}
Los elementos estáticos de una clase genérica nunca pueden ser referidos a parámetros de tipo ya que generan un error en tiempo de ejecución.