0Pricing
TypeScript Academy · Lección

Por qué importan los sistemas de efectos

Haga que los efectos secundarios y los fallos sean explícitos y componibles.

Por qué importan los sistemas de efectos es una lección gratuita de TypeScript Academy en CoddyKit. Esta es la lección 1 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de TypeScript Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de TypeScript Academy incluye 4 lecciones en total.

Por qué son importantes los sistemas de efectos

Un sistema de efectos hace que los efectos secundarios, los fallos y las dependencias sean explícitos y componibles en el sistema de tipos. En lugar de excepciones ocultas y E/S ambiental, cada efecto es un valor que puede pasar, transformar y combinar.

Problemas de async/throw sin abstracciones

El uso directo de async/await con throw oculta información crucial: la firma de la función no indica qué errores puede lanzar ni qué recursos necesita.

async function getUser(id: number): Promise<User> {
  // may throw NotFoundError, may throw NetworkError
  // needs a database connection from... somewhere
  // none of this is in the type
  return await db.users.find(id);
}

Los errores son invisibles

Promise<User> no informa de nada sobre las situaciones de fallo. Los llamadores no pueden saber qué errores deben gestionar, así que capturan demasiados o se olvidan por completo de algunos casos.

Las dependencias son implícitas

La función anterior depende silenciosamente de una base de datos. Obtiene esa dependencia de un valor global o de una importación, lo que dificulta las pruebas y la sustitución, además de ocultar el contrato real.

Qué es un valor de efecto

Un efecto es una descripción de un cálculo, no el cálculo en sí. Construirlo no hace nada; se ejecuta más adelante. Esto convierte los efectos en valores puros que se pueden componer como datos.

import { Effect } from "effect";

// A description: produces number, no errors, no requirements
const program = Effect.succeed(42);
// Nothing has run yet.

Fallos explícitos

Los efectos incorporan sus posibles errores en el tipo, por lo que el compilador le obliga a gestionarlos o propagarlos de forma deliberada.

import { Effect } from "effect";

const risky = Effect.fail(new Error("boom"));
// type encodes that this can fail with Error

Dependencias explícitas

Los efectos también registran los servicios necesarios en su tipo. Un cálculo que necesita una Database lo indica explícitamente y no se puede ejecutar hasta que se proporcione una.

Componibilidad

Como los efectos son valores, se combinan con operadores (map, flatMap, zip) igual que los arrays o las promesas, pero los canales de errores y dependencias se transportan automáticamente.

Ejecución diferida

No sucede nada hasta que ejecuta explícitamente el efecto (por ejemplo, Effect.runPromise). Esta separación entre descripción y ejecución permite reintentos, interrupciones y pruebas sin volver a activar los efectos secundarios.

import { Effect } from "effect";

const program = Effect.succeed(1);
// Run at the edge of your app:
// const result = await Effect.runPromise(program);

Comparación con las promesas

Una Promise es impaciente (se ejecuta de inmediato), no proporciona tipos para los errores y no conoce las dependencias. Un Effect es perezoso, tiene errores tipados y conoce las dependencias: es un superconjunto estricto de esa información.

Por qué es importante

Hacer explícitos los efectos, errores y dependencias permite que el compilador imponga una gestión correcta, que el código se pueda probar sustituyendo dependencias y que los flujos asíncronos complejos se compongan de forma fiable; esta es la motivación de bibliotecas como Effect-TS.

Comprobación rápida

Compruebe su comprensión de la importancia de los sistemas de efectos.

Resumen

Los sistemas de efectos hacen que los efectos secundarios, fallos y dependencias sean explícitos. A diferencia de las promesas impacientes, que no conocen los errores y ocultan las dependencias, un efecto es una descripción perezosa y componible de un cálculo cuyo tipo contiene información sobre el resultado, el error y los requisitos, lo que permite una composición fiable y facilita las pruebas.

Preguntas frecuentes

¿La lección «Por qué importan los sistemas de efectos» es gratis?

Sí — el texto completo de «Por qué importan los sistemas de efectos» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de TypeScript Academy, actualiza a CoddyKit PRO. El curso de TypeScript Academy incluye 4 lecciones en total.

¿Qué aprenderé en «Por qué importan los sistemas de efectos»?

Haga que los efectos secundarios y los fallos sean explícitos y componibles. Practicas TypeScript Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar TypeScript Academy?

No se requiere experiencia previa. TypeScript Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 1 de 4.

¿Cuánto tiempo toma la lección «Por qué importan los sistemas de efectos»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de TypeScript Academy?

Sí. Cada lección de TypeScript Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Por qué importan los sistemas de efectos
  2. El tipo Effect
  3. Composición de efectos
  4. Canales de error y dependencias
← Volver a TypeScript Academy