- "The missing Standard Library for TypeScript"
- Diseñada para facilitar la creación de programas complejos síncronos y asíncronos
- Hace que el código sea más composable, reusable y testable
- Maximum Type-Safety (incluyendo manejo de errores)
- Ofrece una amplia variedad de bibliotecas
- Proporciona clustering y workflows (versión alfa)
- Amplia compatibilidad
- Node, Deno, Bun, Cloudflare Workers, Chrome
- React, Solid.JS, Vite, Next.JS, Tauri
- Características principales
- Concurrencia (Concurrency): permite implementar aplicaciones altamente escalables y de latencia ultrabaja mediante un modelo de concurrencia basado en Fiber
- Composabilidad (Composability): permite construir software fácil de mantener, legible y flexible usando componentes pequeños y reutilizables
- Seguridad de recursos (Resource Safety): permite gestionar de forma segura la adquisición y liberación de recursos incluso si el programa falla
- Seguridad de tipos (Type Safety): pone énfasis en la inferencia y seguridad de tipos, aprovechando al máximo el sistema de tipos de TypeScript
- Manejo de errores (Error Handling): permite manejar errores de forma estructurada y confiable usando capacidades integradas
- Asincronía (Asynchronicity): permite escribir código de manera que se vea igual tanto si es síncrono como asíncrono
- Observabilidad (Observability): permite depurar y monitorear fácilmente la ejecución del programa mediante capacidades completas de tracing
¿Por qué Effect?
- Programar es difícil
- Al crear bibliotecas y aplicaciones se usan muchas herramientas para gestionar la complejidad
- Effect propone una nueva forma de pensar la programación en TypeScript
- Con las herramientas del ecosistema de Effect se pueden construir mejores aplicaciones y bibliotecas
- Esto permite entender mejor el lenguaje TypeScript y su sistema de tipos, y hacer que los programas sean más confiables y más fáciles de mantener
El patrón de Effect
- En el código TypeScript común normalmente se asume que una función tendrá éxito o lanzará una excepción
- Ejemplo: la función
divide lanza una excepción si se divide entre 0
- Solo viendo el tipo no se puede saber que esta función podría lanzar una excepción
- Cuando hay cientos o miles de funciones en una base de código, este problema crece
- Es fácil olvidar el manejo de excepciones y difícil administrarlo
- El compilador de TypeScript es la primera línea de defensa contra bugs, errores de dominio y complejidad general
Aplicar el patrón de Effect
- La idea central de Effect es que el sistema de tipos también puede usarse para rastrear no solo los valores exitosos, sino también los errores y el "contexto"
- Ejemplo: la versión Effect de la función
divide no lanza una excepción, sino que entrega el error al llamador
- Proporciona capacidades para administrar errores y valores exitosos
- El seguimiento de contexto permite entregar información adicional a una función sin pasar todos los argumentos
- Ejemplo: durante las pruebas se puede reemplazar la implementación real de un servicio externo por 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)
El ecosistema de Effect
- La combinación de las ideas únicas de Effect con otras herramientas ha formado un rico ecosistema de bibliotecas que facilita crear aplicaciones complejas
- Cosas que antes parecían imposibles ahora se vuelven algo normal
- El ecosistema de Effect está creciendo rápidamente y puede revisarse en el GitHub de Effect
No reinventes la rueda
- En el código de aplicaciones TypeScript a menudo se resuelven los mismos problemas una y otra vez
- La interacción con servicios externos, sistemas de archivos y bases de datos es un problema común para cualquier desarrollador de aplicaciones
- Effect ofrece un rico ecosistema de bibliotecas con soluciones estandarizadas para estos problemas
- Sin necesidad de instalar múltiples dependencias, Effect resuelve muchos problemas de una sola vez
Resolver problemas prácticos
- Effect está inspirado en Scala y Haskell
- Sin embargo, el objetivo de Effect es ofrecer un toolkit práctico para resolver los problemas cotidianos que aparecen al construir aplicaciones y bibliotecas en TypeScript
Aprender disfrutándolo
- Aprender Effect es divertido
- Muchos desarrolladores ya usan Effect en su trabajo para resolver problemas reales
- Se puede empezar usando primero una parte del ecosistema de Effect e ir aprovechando gradualmente más herramientas
- Al principio los conceptos de Effect pueden resultar poco familiares, pero dedicar tiempo a leer la documentación y entender las ideas clave ayuda después al usar herramientas más avanzadas
- La comunidad de Effect siempre está lista para ayudar con el aprendizaje y el crecimiento. Consulta Discord o GitHub
3 comentarios
Parece seguir una línea similar a los principios fundamentales que tiene Rust.
Tendría que usarlo un poco más para saberlo bien, pero comparado con fp-ts se siente mucho más cómodo de usar.
Se decidió que fp-ts no seguirá desarrollando la versión 3.0 y se integrará a effect.
Si usas fp-ts, vale la pena considerar effect.
https://x.com/MichaelArnaldi/status/1626975031048773635
https://effect.website/docs/other/fp-ts