Patrón Result en TypeScript: una alternativa a los bloques try-catch
Un desarrollador sugiere trasladar la gestión de errores de Rust al ecosistema de JavaScript para forzar el tratamiento explícito de fallos.

En el ecosistema de JavaScript y TypeScript, la gestión de excepciones mediante bloques try/catch es la norma, pero el enfoque permite ignorar errores de forma implícita si la cadena de llamadas no los intercepta. David Dal Busco propone aplicar el patrón Result, nativo de Rust, para hacer que los errores sean valores tipados que obligan a la aplicación a procesarlos.
La idea central es dividir la arquitectura en tres capas: presentación, servicios y núcleo. El núcleo contiene la lógica cruda (llamadas a API, lectura de sistema de archivos) y lanza excepciones libremente. La capa de servicios actúa como contención, atrapando cada posible fallo y devolviendo un objeto tipado del tipo Result<T>, que contiene o bien el éxito o bien el error. Finalmente, la capa de presentación solo consume estos objetos, eliminando la necesidad de usar try/catch en la interfaz de usuario o en el controlador principal.
Dal Busco define el tipo Result en TypeScript de forma sencilla, usando unknown para el error, lo que se asemeja al funcionamiento de la librería anyhow en Rust. Esta decisión prioriza la conveniencia y la captura global de fallos sobre la precisión tipada estricta. La justificación es pragmática: en un entorno dinámico, cualquier dependencia externa puede fallar de forma impredecible.
Para evitar la repetición constante de bloques try/catch en cada función de la capa de servicios, el autor implementa una utilidad llamada tryCatch. Esta función recibe una promesa, ejecuta el código y devuelve el Result correspondiente. Esto permite escribir servicios una línea, limpiando el código y centralizando la lógica de conversión de excepciones a valores manejables.
Aunque esto añade una capa de abstracción, el beneficio radica en la seguridad operativa. Al forzar que la capa de presentación solo vea resultados tipados, se reduce drásticamente la probabilidad de que un error no gestionado caiga en el cliente o termine como un mensaje genérico en la consola. Es un patrón conocido en otros lenguajes que migra ahora a TypeScript con herramientas ligeras.