0Pricing
TypeScript Academy · Lección

Canales de error y dependencias

Realice el seguimiento de errores tipados y dependencias inyectadas en los efectos.

Canales de error y dependencias es una lección gratuita de TypeScript Academy en CoddyKit. Esta es la lección 4 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.

Canales de errores y dependencias

Dos canales hacen que Effect sea potente: el canal de errores tipado (E) y el canal de requisitos (R). En esta lección aprenderá a fallar con errores tipados y a proporcionar dependencias mediante Context y Layer.

Fallos tipados con Effect.fail

Effect.fail coloca un valor en el canal de errores. Las clases con etiquetas facilitan distinguir los errores.

import { Effect } from "effect";

class NotFound { readonly _tag = "NotFound"; }
class Forbidden { readonly _tag = "Forbidden"; }

const load = Effect.fail(new NotFound());
// Effect<never, NotFound, never>

Las uniones de errores al componer

Al encadenar efectos con errores diferentes, estos se combinan en el canal E, de modo que el tipo enumera todos los posibles modos de fallo.

// Effect<A, NotFound, never> then Effect<B, Forbidden, never>
// => Effect<B, NotFound | Forbidden, never>

Gestión de errores

Effect.catchAll o catchTag gestionan los errores, eliminándolos del canal (o reemplazándolos). Gestionar NotFound hace más específico E.

import { Effect, pipe } from "effect";

const safe = pipe(
  Effect.fail(new NotFound()),
  Effect.catchTag("NotFound", () => Effect.succeed("default"))
);
// Effect<string, never, never> -- error handled

Recuperar frente a propagar

Si no gestiona un error, este permanece en E y se propaga a quien llama, que deberá gestionarlo o volver a propagarlo. El compilador garantiza que los errores nunca se pierdan silenciosamente.

Declarar una dependencia

Un servicio se declara como un Context.Tag. Los efectos que lo utilizan incorporan el servicio a su canal R.

import { Context, Effect } from "effect";

class Random extends Context.Tag("Random")<
  Random,
  { readonly next: Effect.Effect<number> }
>() {}

const program = Effect.gen(function* () {
  const random = yield* Random;
  return yield* random.next;
});
// Effect<number, never, Random>

Los requisitos aparecen en el tipo

Observe que el canal R ahora contiene Random. El efecto no puede ejecutarse hasta que se satisfaga ese requisito; el compilador lo impone.

Proporcionar con una Layer

Una Layer describe cómo construir un servicio. Proporcionar una layer satisface el requisito y lo elimina de R.

import { Effect, Layer } from "effect";

const RandomLive = Layer.succeed(Random, {
  next: Effect.sync(() => Math.random()),
});

const runnable = Effect.provide(program, RandomLive);
// Effect<number, never, never> -- R cleared

Las layers se componen

Las layers pueden depender de otras layers y combinarse para construir un grafo completo de dependencias. Effect las conecta en el orden correcto basándose en sus tipos.

import { Layer } from "effect";
// Layer.merge(DatabaseLive, LoggerLive)
// Layer that provides both services

Probar intercambiando layers

Como las dependencias son explícitas, en las pruebas se proporciona una layer diferente (por ejemplo, una instancia determinista de Random) sin modificar el programa que se está probando. Esta es una gran ventaja del seguimiento de requisitos.

import { Layer, Effect } from "effect";

const RandomTest = Layer.succeed(Random, {
  next: Effect.succeed(0.5),
});
// Effect.provide(program, RandomTest) -> deterministic

Por qué es importante

Los canales de errores y requisitos convierten las suposiciones invisibles en contratos comprobados por el compilador: cada fallo debe gestionarse o declararse, y cada dependencia debe proporcionarse. Esto es lo que hace que los programas grandes de Effect sean sólidos y fáciles de probar.

Comprobación rápida

Confirme cuánto entiende sobre los canales de errores y las dependencias.

Repaso

El canal de errores realiza un seguimiento de los fallos tipados (Effect.fail, cuyo tipo se hace más específico mediante catchTag/catchAll) que se combinan en una unión al componer efectos, mientras que el canal de requisitos realiza un seguimiento de los servicios declarados mediante Context.Tag y satisfechos por Layers a través de Effect.provide. Juntos, hacen que el compilador compruebe los fallos y las dependencias, y facilitan las pruebas mediante el intercambio de layers.

Preguntas frecuentes

¿La lección «Canales de error y dependencias» es gratis?

Sí — el texto completo de «Canales de error y dependencias» 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 «Canales de error y dependencias»?

Realice el seguimiento de errores tipados y dependencias inyectadas en los efectos. 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 4 de 4.

¿Cuánto tiempo toma la lección «Canales de error y dependencias»?

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