BookinglyTech News
Software

Dos utilidades para aplicar el patrón Result en TypeScript

Un desarrollador comparte dos pequeños helpers para usar el patrón Result de Rust en TypeScript, reduciendo el uso de try/catch.

2 min de lecturaLobsters0 vistas

David Dalbusco, desarrollador con experiencia en Rust, ha publicado en su blog dos utilidades sencillas para adoptar el patrón Result en TypeScript. El patrón, habitual en Rust, consiste en devolver un valor que indique éxito o error en lugar de lanzar excepciones. En TypeScript, Dalbusco define un tipo Result como una unión discriminada con status "success" o "error", tipando el error como unknown.

La primera utilidad es tryCatch, una función que envuelve una promesa y devuelve un Result. En lugar de repetir bloques try/catch en cada método del servicio, se pasa la función a tryCatch y se obtiene un Result directamente:

export const tryCatch = async <T>(fn: () => Promise<T>): Promise<Result<T>> => {
  try {
    const result = await fn();
    return { status: "success", result };
  } catch (err: unknown) {
    return { status: "error", err };
  }
};

Así, un método que lista pizzas queda reducido a:

export const listPizzas = (): Promise<Result<Pizza[]>> => tryCatch(api.list);

La segunda utilidad, safeExec, no llega a desarrollarse completamente en el artículo (se corta), pero la idea es similar para funciones síncronas que lanzan excepciones.

El autor explica cómo aplica este patrón en sus proyectos, organizando el código en tres capas: presentación, servicios y núcleo. La capa de presentación solo maneja Result y nunca usa try/catch; los servicios son responsables de capturar todas las excepciones y devolver Result; el núcleo (APIs, base de datos, sistema de archivos) deja que los errores se propaguen libremente. Esta separación obliga a que los errores se manejen de forma explícita y evita que se cuelen excepciones inesperadas a la interfaz de usuario.

Dalbusco reconoce que el patrón es más verboso que lanzar excepciones a secas, pero valora las garantías estáticas y la claridad que aporta, sobre todo en proyectos que crecen. Su enfoque recuerda a cómo anyhow funciona en Rust, con errores de tipo genérico que sacrifican precisión por conveniencia.

El artículo, publicado originalmente en su blog y comentado en Lobsters, ha llamado la atención en la comunidad de desarrolladores de TypeScript por su pragmatismo. Aunque no introduce conceptos revolucionarios, sí muestra una forma sencilla de reducir la repetición de try/catch y fomentar un manejo de errores más consistente.