Voltar ao código TypeScript

Errores sin excepciones: el tipo Result

Un tipo de dos variantes que obliga al compilador a recordarte que la operación puede fallar.

Este post ainda não está no seu idioma; você o vê em espanhol. O código é o mesmo.

O problema

Una función que lanza excepciones no lo dice en su firma: quien la llama se entera en producción. Con un Result, olvidarse de manejar el error no compila.

TypeScript
type Result<T, E = string> = { ok: true; valor: T } | { ok: false; error: E };

function parsearMonto(texto: string): Result<number> {
  const n = Number(texto.replace(",", "."));
  if (Number.isNaN(n)) return { ok: false, error: `"${texto}" no es un número` };
  if (n < 0) return { ok: false, error: "el monto no puede ser negativo" };
  return { ok: true, valor: Math.round(n * 100) / 100 };
}

const r = parsearMonto("149,90");
if (r.ok) {
  console.log("Cobrar", r.valor.toFixed(2));
} else {
  console.error("Rechazado:", r.error);
}

Por que está escrito assim

  1. Result es una unión discriminada: el campo ok le dice a TypeScript cuál de las dos formas tiene delante.
  2. Dentro del if (r.ok) el compilador sabe que existe r.valor; en el else, que existe r.error. Usar el campo equivocado no compila.
  3. La función nunca lanza: todo lo que puede salir mal está en el tipo de retorno.
  4. El redondeo a dos decimales evita arrastrar 149.89999 a una factura.
Como testar

Guardalo como monto.ts y corré: npx tsx monto.ts. Probá cambiar la entrada por "abc" o "-5".

Atenção

Result no reemplaza a las excepciones para lo inesperado (disco lleno, bug). Sirve para los fallos que son parte normal del negocio: un dato mal escrito, un saldo insuficiente.

Adapte ao seu caso com IA

O botão copia este prompt com o código colado abaixo. Substitua os colchetes pelo que é seu e cole no ChatGPT, Claude, Gemini ou Copilot.

O prompt
Uso este tipo Result en TypeScript. Escribime las funciones auxiliares map, andThen y unwrapOr para encadenar operaciones sin anidar if, y mostrame cómo quedaría validar este formulario con ellas: [CAMPOS Y REGLAS]. Mantené el tipado estricto, sin any, y sin librerías.

Exemplo escrito e revisado à mão.

Compartilhar

Comentários

Ainda não há comentários. O primeiro pode ser o seu.

Apenas texto, sem links. Não pedimos e-mail. Os comentários são revisados antes de serem publicados.

Adaptou para algo seu?

Me conte o que resolveu com isto, ou o que faltou.

Continue testando

Mais código

Ver todos
Darinel Ortega Online · respondo ao longo do dia
Hoje
Olá. Aqui eu não vendo nada: isto é para trocar conhecimento sobre tecnologia.
Escreva o que quiser — pode mandar texto, imagens ou documentos. As mensagens chegam ao meu console e eu respondo por lá.
Você está escrevendo fora do horário. Eu leio assim que o dia começar.

Conversa aberta para compartilhar conhecimento. As mensagens chegam ao meu console e eu respondo por lá.

Vamos marcar uma conversa

Escolha o dia e a hora que funcionem para você. Trinta minutos, sem discurso comercial.

Videochamada

Para uma videochamada, peça por aqui que eu te mando o link da sessão.