TypeScript Academy · Lezione

Canali degli errori e dipendenze

Tracci gli errori tipizzati e le dipendenze iniettate negli effetti.

Lezione 4 di 413 passaggi

Canali degli errori e dipendenze è una lezione TypeScript Academy gratuita su CoddyKit. Questa è la lezione 4 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento TypeScript Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso TypeScript Academy include 4 lezioni in totale.

Canali degli errori e dipendenze

Due canali rendono Effect potente: il canale degli errori tipizzato (E) e il canale dei requisiti (R). In questa lezione vedrà come generare errori tipizzati e come fornire dipendenze tramite Context e Layer.

Fallimenti tipizzati con Effect.fail

Effect.fail inserisce un valore nel canale degli errori. Le classi contrassegnate rendono gli errori facili da distinguere.

import { Effect } from "effect";

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

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

Gli errori si uniscono durante la composizione

Mettere in sequenza effetti con errori diversi li unisce nel canale E, così il tipo elenca ogni possibile modalità di fallimento.

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

Gestione degli errori

Effect.catchAll o catchTag gestiscono gli errori, rimuovendoli dal canale o sostituendoli. Gestire NotFound restringe 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

Recupero e propagazione

Se non gestisce un errore, questo rimane in E e si propaga al chiamante, che dovrà gestirlo o propagarlo nuovamente. Il compilatore garantisce che gli errori non vengano mai persi in modo silenzioso.

Dichiarare una dipendenza

Un servizio viene dichiarato come Context.Tag. Gli effetti che lo utilizzano acquisiscono il servizio nel proprio canale 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>

I requisiti compaiono nel tipo

Noti che il canale R ora contiene Random. L'effetto non può essere eseguito finché il requisito non viene soddisfatto; il compilatore lo impone.

Fornire con un Layer

Un Layer descrive come creare un servizio. Fornire un layer soddisfa il requisito e lo rimuove da 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

I Layer si compongono

I Layer possono dipendere da altri layer e unirsi tra loro, creando un grafo completo delle dipendenze. Effect li collega nell'ordine corretto in base ai rispettivi tipi.

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

Testare sostituendo i Layer

Poiché le dipendenze sono esplicite, nei test si può fornire un layer diverso (ad esempio un Random deterministico) senza modificare il programma sottoposto al test: è un grande vantaggio del tracciamento dei requisiti.

import { Layer, Effect } from "effect";

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

Perché è importante

I canali degli errori e dei requisiti trasformano le supposizioni implicite in contratti verificati dal compilatore: ogni fallimento deve essere gestito o dichiarato e ogni dipendenza deve essere fornita. È questo che rende i programmi Effect complessi robusti e facili da testare.

Verifica rapida

Confermi la Sua comprensione dei canali degli errori e delle dipendenze.

Riepilogo

Il canale degli errori tiene traccia dei fallimenti tipizzati (Effect.fail, ristretti da catchTag/catchAll) che si uniscono durante la composizione, mentre il canale dei requisiti tiene traccia dei servizi dichiarati tramite Context.Tag e soddisfatti da Layer attraverso Effect.provide. Insieme, rendono fallimenti e dipendenze verificabili dal compilatore e semplificano i test grazie alla sostituzione dei layer.

Gratis per iniziare

Impara TypeScript con un tutor IA — gratis

Scrivi ed esegui vero codice nel tuo browser, ricevi aiuto istantaneo da un tutor IA disponibile 24/7, e riprendi da dove hai lasciato sul web o nell'app.

Corsi
101
Lezioni
352

Domande Frequenti

La lezione «Canali degli errori e dipendenze» è gratuita?

Sì — il testo completo di «Canali degli errori e dipendenze» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso TypeScript Academy, passa a CoddyKit PRO. Il corso TypeScript Academy include 4 lezioni in totale.

Cosa imparerò in «Canali degli errori e dipendenze»?

Tracci gli errori tipizzati e le dipendenze iniettate negli effetti. Eserciti TypeScript Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare TypeScript Academy?

Non è richiesta alcuna esperienza precedente. TypeScript Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 4 di 4.

Quanto tempo richiede la lezione «Canali degli errori e dipendenze»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione TypeScript Academy?

Sì. Ogni lezione TypeScript Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. Perché i sistemi degli effetti sono importanti
  2. Il tipo Effect
  3. Comporre gli effetti
  4. Canali degli errori e dipendenze
← Torna a TypeScript Academy