typestar

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

  1. El tipo del constructor es lo que lo vuelve componible.
  2. Los mixins se apilan, cada uno agregando miembros.
  3. Así hace TypeScript la herencia múltiple.

Palabras clave y builtins usados aquí

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.

Escribe este fragmento

Paso 4 de 4 en Clases; paso 4 de 19 en Clases y patrones.

← Anterior Siguiente →