typestar

Aserciones y su costo en TypeScript

as, non-null y las dos salidas de emergencia de las que debes desconfiar.

const raw: unknown = JSON.parse('{"lang":"ts"}');

const risky = raw as { lang: string };
console.log(risky.lang.toUpperCase()); // trusted, unchecked

const rows: (string | null)[] = ["a", null];
const first = rows[0]!;
console.log(first.length);

function narrow(value: unknown): { lang: string } {
  if (typeof value !== "object" || value === null || !("lang" in value)) {
    throw new TypeError("no lang");
  }
  const { lang } = value as { lang: unknown };
  if (typeof lang !== "string") throw new TypeError("lang is not a string");
  return { lang };
}

console.log(narrow(raw).lang);

const widened = "monokai" as const satisfies string;
const doubled = <T,>(value: T): [T, T] => [value, value];
console.log(widened, doubled(1));

Cómo funciona

  1. as reinterpreta sin chequear; puede mentir.
  2. ! asevera no nulo y revienta en tiempo de ejecución cuando se equivoca.
  3. Una función que valida es la alternativa honesta.

Palabras clave y builtins usados aquí

El intento, en números

Líneas
23
Caracteres a escribir
724
Tokens
204
Ritmo de tres estrellas
90 tpm

Al ritmo de tres estrellas de 90 tokens por minuto, este intento toma unos 136 segundos.

Escribe este fragmento

Paso 2 de 2 en Los tipos incómodos; paso 6 de 23 en Tipos y anotaciones.

← Anterior Siguiente →