En TypeScript, a menudo necesitamos simplificar la lógica de condiciones, y aunque existen alternativas como if-else o switch, estas pueden volverse confusas en estructuras más complejas. Aquí es donde ts-pattern entra en juego, ofreciendo una forma poderosa y funcional de hacer pattern matching. Inspirado en técnicas de lenguajes como Haskell y Scala, ts-pattern permite coincidir patrones de datos y manejar casos de manera clara y estructurada.
ts-pattern es una biblioteca que lleva el pattern matching a TypeScript, haciéndolo flexible y adecuado para manejar varios tipos de datos y patrones complejos. Esto ayuda a escribir código más conciso y fácil de mantener, especialmente en proyectos grandes donde las condiciones exhaustivas son comunes.
Para instalar ts-pattern en tu proyecto, simplemente ejecuta:
npm install ts-pattern
Luego, impórtalo en tu archivo TypeScript:
import { match } from 'ts-pattern';
Veamos un ejemplo básico para entender cómo funciona match en strings:
const saludo = match('hola')
.with('hola', () => '¡Hola Mundo!')
.with('adiós', () => '¡Hasta luego!')
.otherwise(() => 'Desconocido');
console.log(saludo); // Salida: ¡Hola Mundo!
ts-pattern también permite manejar objetos anidados o arrays, facilitando el trabajo con estructuras más detalladas. Supongamos que tenemos un estado de carga y queremos manejarlo de manera exhaustiva:
type Estado = 'cargando' | 'éxito' | 'error';
const mensaje = match<Estado>('éxito')
.with('cargando', () => 'Cargando...')
.with('éxito', () => '¡Datos cargados!')
.with('error', () => 'Hubo un problema.')
.exhaustive();
console.log(mensaje); // Salida: ¡Datos cargados!
Con .exhaustive(), ts-pattern se asegura de que todos los posibles valores de `Estado` están cubiertos, ayudándote a evitar errores futuros.
ts-pattern simplifica el manejo de múltiples condiciones en TypeScript, mejorando la claridad y la mantenibilidad del código.
Dejo link: https://github.com/gvergnaud/ts-pattern