- "The missing Standard Library for TypeScript"
- Conçue pour faciliter la création de programmes synchrones/asynchrones complexes
- Du code plus composable, réutilisable et testable
- Une sécurité de type maximale, y compris pour la gestion des erreurs
- Fournit de nombreuses bibliothèques
- Prise en charge du clustering et des workflows (version alpha)
- Large compatibilité
- Node, Deno, Bun, Cloudflare Workers, Chrome
- React, Solid.JS, Vite, Next.JS, Tauri
- Principales caractéristiques
- Concurrence : grâce à un modèle de concurrence basé sur les fibers, il est possible de créer des applications hautement scalables et à très faible latence
- Composabilité : permet de construire des logiciels flexibles, faciles à maintenir et lisibles à partir de petits composants réutilisables
- Sécurité des ressources : permet de gérer en toute sécurité l’acquisition et la libération des ressources, même si le programme échoue
- Type Safety : met l’accent sur l’inférence de types et la sécurité de type afin d’exploiter pleinement le système de types de TypeScript
- Gestion des erreurs : permet de traiter les erreurs de façon structurée et fiable grâce à des fonctionnalités intégrées
- Asynchronicité : permet d’écrire du code qui se présente de la même manière, qu’il soit synchrone ou asynchrone
- Observabilité : grâce à des capacités complètes de traçage, il devient plus simple de déboguer et surveiller l’exécution des programmes
Pourquoi Effect ?
- Programmer est difficile
- Lorsqu’on crée des bibliothèques et des applications, on utilise de nombreux outils pour gérer la complexité
- Effect propose une nouvelle façon de penser la programmation en TypeScript
- Les outils de l’écosystème Effect permettent de construire de meilleures applications et bibliothèques
- Cela aide à mieux comprendre le langage TypeScript et son système de types, tout en rendant les programmes plus fiables et plus faciles à maintenir
Le pattern Effect
- Dans du code TypeScript classique, on suppose souvent qu’une fonction réussit ou lève une exception
- Exemple : la fonction
divide lève une exception si l’on divise par zéro
- En regardant uniquement le type, il est impossible de savoir que cette fonction peut lever une exception
- Ce problème s’amplifie lorsqu’un codebase contient des centaines ou des milliers de fonctions
- Il est facile d’oublier de gérer les exceptions, et cela devient difficile à maintenir
- Le compilateur TypeScript constitue la première ligne de défense contre les bugs, les erreurs métier et la complexité générale
Appliquer le pattern Effect
- L’idée centrale d’Effect est d’utiliser le système de types pour suivre non seulement les valeurs de succès, mais aussi les erreurs et le "contexte"
- Exemple : la version Effect de la fonction
divide ne lève pas d’exception ; elle transmet l’erreur à l’appelant
- Fournit des mécanismes pour gérer les valeurs de succès et les erreurs
- Le suivi du contexte permet de fournir des informations supplémentaires à une fonction sans devoir transmettre tous les arguments
- Exemple : pendant les tests, il est possible de remplacer l’implémentation réelle d’un service externe par un mock
import { Effect } from "effect"
const divide = (a: number, b: number): Effect.Effect<number, Error, never> =>
b === 0
? Effect.fail(new Error("Cannot divide by zero"))
: Effect.succeed(a / b)
L’écosystème Effect
- Les idées propres à Effect, combinées à d’autres outils, ont donné naissance à un riche écosystème de bibliothèques qui facilite la création d’applications complexes
- Ce qui semblait autrefois impossible devient désormais banal
- L’écosystème Effect se développe rapidement et peut être consulté sur le GitHub d’Effect
Ne réinventez pas la roue
- Dans le code applicatif TypeScript, on résout souvent les mêmes problèmes de manière répétée
- Les interactions avec des services externes, le système de fichiers et les bases de données sont des problèmes communs à tous les développeurs d’applications
- Effect propose un riche écosystème de bibliothèques offrant des solutions standardisées à ces problèmes
- Sans avoir à installer de multiples dépendances, Effect permet de résoudre de nombreux problèmes d’un seul coup
Résoudre des problèmes concrets
- Effect s’inspire de Scala et Haskell.
- Mais l’objectif d’Effect est de fournir une boîte à outils pratique pour résoudre les problèmes du quotidien rencontrés lors de la création d’applications et de bibliothèques TypeScript
Apprendre en s’amusant
- Apprendre Effect est amusant
- De nombreux développeurs utilisent déjà Effect en production pour résoudre de vrais problèmes
- Il est possible de commencer par utiliser une partie de l’écosystème Effect, puis d’exploiter progressivement davantage d’outils
- Au début, les concepts d’Effect peuvent sembler peu familiers, mais prendre le temps de lire la documentation et de comprendre les concepts de base aidera ensuite à utiliser des outils plus avancés
- La communauté Effect est toujours prête à aider à apprendre et progresser. Voir Discord ou GitHub
3 commentaires
On dirait que ça suit une trajectoire assez proche des principes fondamentaux de Rust.
Il faut sans doute l’utiliser davantage pour se faire un avis, mais par rapport à fp-ts, c’est bien plus agréable à utiliser.
fp-ts a décidé de ne pas développer la version 3.0 et de rejoindre Effect.
Si vous utilisez fp-ts, cela vaut la peine d’envisager Effect.
https://x.com/MichaelArnaldi/status/1626975031048773635
https://effect.website/docs/other/fp-ts