Mixins en TypeScript
Una función que toma una clase y devuelve una extendida.
type Constructor<T = object> = new (...args: any[]) => T;
function Timestamped<TBase extends Constructor>(Base: TBase) {
return class extends Base {
created = new Date(0);
age(): number {
return Date.now() - this.created.getTime();
}
};
}
function Countable<TBase extends Constructor>(Base: TBase) {
return class extends Base {
count = 0;
increment(): number {
this.count += 1;
return this.count;
}
};
}
class Tour {
constructor(public slug: string) {}
}
const Tracked = Countable(Timestamped(Tour));
const tour = new Tracked("basics");
tour.increment();
console.log(tour.slug, tour.count, tour.age() > 0);
Cómo funciona
- El tipo del constructor es lo que lo vuelve componible.
- Los mixins se apilan, cada uno agregando miembros.
- Así hace TypeScript la herencia múltiple.
Palabras clave y builtins usados aquí
DateTBaseanyclassconstconstructorextendsfunctionnumberpublicreturnstringthistype
El intento, en números
- Líneas
- 29
- Caracteres a escribir
- 610
- Tokens
- 173
- Ritmo de tres estrellas
- 100 tpm
Al ritmo de tres estrellas de 100 tokens por minuto, este intento toma unos 104 segundos.
Paso 4 de 4 en Clases; paso 4 de 19 en Clases y patrones.