typestar

Inyección de dependencias por tipo en TypeScript

Depende de una interfaz; quien llama provee lo que sea que la satisfaga.

interface Clock {
  now(): number;
}

interface Store {
  save(lang: string, tpm: number): Promise<void>;
}

interface Deps {
  clock: Clock;
  store: Store;
}

function makeRecorder({ clock, store }: Deps) {
  return async function record(lang: string, tpm: number): Promise<string> {
    await store.save(lang, tpm);
    return `${lang} at ${tpm} (${clock.now()})`;
  };
}

const calls: string[] = [];
const record = makeRecorder({
  clock: { now: () => 1234 },
  store: { save: async (lang, tpm) => void calls.push(`${lang}:${tpm}`) },
});

record("ts", 98).then((line) => console.log(line, calls));

Cómo funciona

  1. La interfaz es el contrato, y se mantiene pequeña.
  2. Una prueba pasa un fake sin ningún framework de por medio.
  3. Con aplicación parcial alcanza: no hace falta un contenedor.

Palabras clave y builtins usados aquí

El intento, en números

Líneas
27
Caracteres a escribir
578
Tokens
188
Ritmo de tres estrellas
110 tpm

Al ritmo de tres estrellas de 110 tokens por minuto, este intento toma unos 103 segundos.

Escribe este fragmento

Paso 2 de 5 en Construcción e inyección; paso 10 de 19 en Clases y patrones.

← Anterior Siguiente →