fp-ts pour TypeScript : guide complet de programmation fonctionnelle
1. Qu'est-ce que fp-ts et pourquoi l'utiliser ?
fp-ts (Functional Programming in TypeScript) est une bibliothèque open-source puissante qui intègre le paradigme de la programmation fonctionnelle (PF) dans TypeScript. Elle fournit un ensemble de types, de fonctions et de combinateurs inspirés de langages comme Haskell, PureScript et Scala. Contrairement aux approches impératives ou orientées objet, fp-ts permet d'écrire un code pur, prévisible et facile à tester. La bibliothèque repose sur des concepts tels que les foncteurs, les monades, les foncteurs applicatifs et d'autres abstractions qui aident à gérer les effets de bord, traiter les erreurs et travailler avec l'asynchrone sans exceptions ni mutations d'état.
Pourquoi utiliser fp-ts ? Dans le développement moderne avec TypeScript, on rencontre souvent des problèmes : exceptions inattendues (notamment avec null ou undefined), difficultés de test dues à des dépendances cachées et des effets de bord, ainsi qu'un code asynchrone complexe avec des callbacks. fp-ts résout ces problèmes en proposant un système de types strict et des abstractions composables. Par exemple, le type Option modélise explicitement l'absence de valeur, tandis que Either gère les erreurs sans try/catch. Cela rend le code plus sûr et mieux documenté au niveau des types.
Cette bibliothèque est particulièrement utile dans les projets à forte complexité métier où la fiabilité et la maintenabilité sont cruciales. Elle convient également aux équipes souhaitant adopter les principes fonctionnels progressivement, sans réécrire l'intégralité du projet. fp-ts bénéficie d'une communauté active et d'un écosystème riche, incluant des intégrations avec io-ts (validation de données), monocle-ts (lentilles) et hyper-ts (serveurs web).
2. Installation
fp-ts est distribué via npm. Pour l'installer, exécutez la commande suivante :
npm install fp-ts
Il est également recommandé d'installer @types/node pour bénéficier de la prise en charge des types Node.js si vous ne travaillez pas dans un navigateur :
npm install -D @types/node
fp-ts nécessite TypeScript version 4.0 ou supérieure. Assurez-vous que l'option "strict": true est activée dans votre fichier tsconfig.json pour une sécurité maximale des types.
3. Démarrage rapide — exemple minimal fonctionnel
Prenons un exemple simple : la division sécurisée de deux nombres avec gestion de la division par zéro. Sans fp-ts, on écrirait :
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
}
Avec fp-ts, utilisons le type 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) ou none
// Extraction de la valeur
import { fold } from 'fp-ts/Option';
const message = pipe(
result,
fold(
() => 'Erreur : division par zéro',
(value) => `Résultat : ${value}`
)
);
console.log(message); // "Résultat : 5"
Cet exemple illustre les principes clés de fp-ts : la composition via pipe, la modélisation explicite de l'absence de valeur et la gestion des erreurs sans exceptions.
4. Méthodes/fonctions/classes principales
4.1. Option — gestion des valeurs optionnelles
Signature :
// Constructeurs
declare const some: (a: A) => Option;
declare const none: Option;
// Méthodes principales
declare const map: (f: (a: A) => B) => (fa: Option Aussi dans la bibliothèque
Tests en Go (Golang) : frameworks et outils
Client HTTP pour Go (Golang) : top bibliothèques pour travailler avec HTTP
Parsing HTML en C# (.NET) : bibliothèques HtmlAgilityPack et AngleSharp
Envoi de SMS en Swift (iOS/macOS) : API de la bibliothèque MessageUI