typestar

Restricciones y valores por defecto en TypeScript

Un parámetro de tipo puede acotarse, y puede tener un valor por defecto.

interface Paged<Item, Meta extends object = { page: number }> {
  rows: Item[];
  meta: Meta;
}

function longest<T extends { length: number }>(a: T, b: T): T {
  return a.length >= b.length ? a : b;
}

function makeStore<Value, Key extends string = string>() {
  const rows = new Map<Key, Value>();
  return {
    set(key: Key, value: Value) {
      rows.set(key, value);
      return rows.size;
    },
    get: (key: Key) => rows.get(key),
  };
}

const page: Paged<string> = { rows: ["a"], meta: { page: 1 } };
const store = makeStore<number, "a" | "b">();
store.set("a", 1);
console.log(longest([1, 2], [1]), page.meta.page, store.get("a"));

Cómo funciona

  1. extends acota lo que puede pasarse.
  2. = T provee un valor por defecto cuando no puede inferirse.
  3. Las restricciones son lo que le permite al cuerpo usar el parámetro.

Palabras clave y builtins usados aquí

El intento, en números

Líneas
24
Caracteres a escribir
609
Tokens
216
Ritmo de tres estrellas
100 tpm

Al ritmo de tres estrellas de 100 tokens por minuto, este intento toma unos 130 segundos.

Escribe este fragmento

Paso 2 de 4 en Parámetros de tipo; paso 2 de 20 en Genéricos.

← Anterior Siguiente →