typestar

Predicados de tipo en TypeScript

Una función que devuelve x is T le enseña al compilador qué verificaste.

type Run = { lang: string; tpm: number };

function isRun(value: unknown): value is Run {
  return (
    typeof value === "object" &&
    value !== null &&
    "lang" in value &&
    typeof (value as Run).lang === "string" &&
    typeof (value as Run).tpm === "number"
  );
}

function assertRun(value: unknown): asserts value is Run {
  if (!isRun(value)) throw new TypeError("not a run");
}

function isDefined<T>(value: T | null | undefined): value is T {
  return value !== null && value !== undefined;
}

const raw: unknown = { lang: "ts", tpm: 98 };
if (isRun(raw)) console.log(raw.lang.toUpperCase());

assertRun(raw);
console.log(raw.tpm + 1);
console.log([1, null, 2, undefined].filter(isDefined));

Cómo funciona

  1. El predicado estrecha en cada punto de llamada.
  2. Es la manera honesta de validar datos que vienen de afuera.
  3. Una firma de aserción estrecha sin devolver un valor.

Palabras clave y builtins usados aquí

El intento, en números

Líneas
26
Caracteres a escribir
679
Tokens
193
Ritmo de tres estrellas
95 tpm

Al ritmo de tres estrellas de 95 tokens por minuto, este intento toma unos 122 segundos.

Escribe este fragmento

Paso 3 de 4 en Estrechamiento; paso 9 de 23 en Tipos y anotaciones.

← Anterior Siguiente →