Guía completa de fp-ts para TypeScript con ejemplos

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

fp-ts para TypeScript: guía completa de programación funcional

1. ¿Qué es y para qué sirve?

fp-ts (Functional Programming in TypeScript) es una potente librería de código abierto que incorpora el paradigma de la programación funcional (PF) a TypeScript. Proporciona un conjunto de tipos, funciones y combinadores inspirados en lenguajes como Haskell, PureScript y Scala. A diferencia del enfoque imperativo u orientado a objetos, fp-ts permite escribir código puro, predecible y fácil de probar. La librería se basa en conceptos como functores, mónadas, functores aplicativos y otras abstracciones que ayudan a gestionar efectos secundarios, manejar errores y trabajar con asincronía sin excepciones ni mutación de estado.

¿Por qué usar fp-ts? En el desarrollo moderno con TypeScript surgen problemas frecuentes: excepciones inesperadas (por ejemplo, al trabajar con null o undefined), dificultad para realizar pruebas debido a dependencias ocultas y efectos secundarios, así como código asíncrono confuso con callbacks. fp-ts resuelve estos problemas ofreciendo un sistema de tipos estricto y abstracciones componibles. Por ejemplo, el tipo Option modela explícitamente la ausencia de un valor, mientras que Either maneja errores sin necesidad de try/catch. Esto hace que el código sea más seguro y esté mejor documentado a nivel de tipos.

La librería es especialmente útil en proyectos con lógica de negocio compleja, donde la fiabilidad y el mantenimiento son cruciales. También es ideal para equipos que quieran adoptar principios funcionales de forma gradual, sin reescribir todo el proyecto. fp-ts cuenta con una comunidad activa y un rico ecosistema que incluye integraciones con io-ts (validación de datos), monocle-ts (lentes) y hyper-ts (servidores web).

2. Instalación

fp-ts se distribuye a través de npm. Para instalarlo, ejecuta el siguiente comando:

npm install fp-ts

También se recomienda instalar @types/node para obtener soporte de tipos de Node.js si no trabajas en el navegador:

npm install -D @types/node

Para usar fp-ts necesitas TypeScript versión 4.0 o superior. Asegúrate de que en tu archivo tsconfig.json esté habilitada la opción "strict": true para máxima seguridad de tipos.

3. Inicio rápido — ejemplo mínimo funcional

Veamos un ejemplo sencillo: la división segura de dos números manejando la división entre cero. Sin fp-ts, escribiríamos:

function divide(a: number, b: number): number | null {
  if (b === 0) return null;
  return a / b;
}

const result = divide(10, 2);
if (result !== null) {
  console.log(result); // 5
}

Con fp-ts usamos el tipo Option:

import { pipe } from 'fp-ts/function';
import { Option, some, none, fromPredicate } from 'fp-ts/Option';

const safeDivide = (a: number, b: number): Option =>
  pipe(
    b,
    fromPredicate((x) => x !== 0),
    Option.map((divisor) => a / divisor)
  );

const result = safeDivide(10, 2);
// result: Option — some(5) o none

// Extraemos el valor
import { fold } from 'fp-ts/Option';

const message = pipe(
  result,
  fold(
    () => 'Error: división entre cero',
    (value) => `Resultado: ${value}`
  )
);
console.log(message); // "Resultado: 5"

Este ejemplo muestra los principios clave de fp-ts: composición mediante pipe, modelado explícito de la ausencia de valor y manejo de errores sin excepciones.

4. Métodos/funciones/clases principales

4.1. Option — trabajo con valores opcionales

Firma:

// Constructores
declare const some: (a: A) => Option;
declare const none: Option;

// Métodos principales
declare const map: (f: (a: A) => B) => (fa: Option                    

Recommendations