typestar

unknown, any y never en TypeScript

unknown exige un chequeo, any los suprime todos, never significa que no puede ocurrir.

function parse(raw: unknown): number {
  if (typeof raw === "number") return raw;
  if (typeof raw === "string") return Number.parseFloat(raw);
  throw new TypeError(`cannot parse ${typeof raw}`);
}

function fail(message: string): never {
  throw new Error(message);
}

type Shape = { kind: "circle"; r: number } | { kind: "square"; side: number };

function area(shape: Shape): number {
  switch (shape.kind) {
    case "circle":
      return Math.PI * shape.r ** 2;
    case "square":
      return shape.side ** 2;
    default: {
      const impossible: never = shape;
      return fail(`unhandled ${JSON.stringify(impossible)}`);
    }
  }
}

console.log(parse("2.5"), area({ kind: "square", side: 3 }));

Cómo funciona

  1. unknown es el tipo tope seguro: estréchalo antes de usarlo.
  2. never es el tipo vacío, lo devuelve una función que siempre lanza.
  3. Un switch exhaustivo asigna el sobrante a never.

Palabras clave y builtins usados aquí

El intento, en números

Líneas
26
Caracteres a escribir
656
Tokens
183
Ritmo de tres estrellas
90 tpm

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

Escribe este fragmento

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

← Anterior Siguiente →