typestar

Un tipo Result en TypeScript

Errores en el tipo de retorno, para que quien llama no pueda olvidarlos.

type Result<T, E = Error> =
  | { ok: true; value: T }
  | { ok: false; error: E };

const ok = <T>(value: T): Result<T, never> => ({ ok: true, value });
const err = <E>(error: E): Result<never, E> => ({ ok: false, error });

function parsePort(raw: string): Result<number, string> {
  const port = Number.parseInt(raw, 10);
  if (Number.isNaN(port)) return err(`not a number: ${raw}`);
  if (port < 1 || port > 65535) return err(`out of range: ${port}`);
  return ok(port);
}

function map<T, U, E>(result: Result<T, E>, fn: (value: T) => U): Result<U, E> {
  return result.ok ? ok(fn(result.value)) : result;
}

const parsed = parsePort("8080");
console.log(parsed.ok ? parsed.value : parsed.error);
console.log(map(parsePort("99999"), (n) => n * 2));

Cómo funciona

  1. Una unión discriminada hace explícitos los dos desenlaces.
  2. Estrechar sobre ok te da el valor o el error.
  3. Unos helpers mantienen corta la construcción.

Palabras clave y builtins usados aquí

El intento, en números

Líneas
21
Caracteres a escribir
739
Tokens
261
Ritmo de tres estrellas
105 tpm

Al ritmo de tres estrellas de 105 tokens por minuto, este intento toma unos 149 segundos.

Escribe este fragmento

Paso 1 de 4 en Resultados y validación; paso 5 de 19 en Clases y patrones.

← Anterior Siguiente →