TypeScript Academy · Lektion

Fehlerkanäle und Abhängigkeiten

Verfolgen Sie typisierte Fehler und injizierte Abhängigkeiten in Effekten.

Lektion 4 von 413 Schritte

Fehlerkanäle und Abhängigkeiten ist eine kostenlose TypeScript Academy-Lektion auf CoddyKit. Dies ist Lektion 4 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des TypeScript Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der TypeScript Academy-Kurs umfasst insgesamt 4 Lektionen.

Fehlerkanäle und Abhängigkeiten

Zwei Kanäle machen Effect so leistungsfähig: der typisierte Fehlerkanal (E) und der Anforderungskanal (R). In dieser Lektion erfahren Sie, wie Sie mit typisierten Fehlern fehlschlagen und Abhängigkeiten über Context und Layer bereitstellen.

Typisierte Fehler mit Effect.fail

Effect.fail legt einen Wert im Fehlerkanal ab. Klassen mit Tags machen Fehler leicht unterscheidbar.

import { Effect } from "effect";

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

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

Fehler werden beim Komponieren zu einer Union

Wenn Sie Effekte mit unterschiedlichen Fehlern sequenzieren, werden diese im E-Kanal zu einer Union zusammengeführt, sodass der Typ jeden möglichen Fehlerfall auflistet.

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

Fehlerbehandlung

Effect.catchAll oder catchTag behandeln Fehler und entfernen sie aus dem Kanal oder ersetzen sie. Wenn Sie NotFound behandeln, wird E enger eingegrenzt.

import { Effect, pipe } from "effect";

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

Fehler behandeln oder weitergeben

Wenn Sie einen Fehler nicht behandeln, bleibt er in E und wird an den Aufrufer weitergegeben. Dieser muss ihn dann behandeln oder erneut weitergeben. Der Compiler stellt sicher, dass Fehler niemals stillschweigend verloren gehen.

Eine Abhängigkeit deklarieren

Ein Service wird als Context.Tag deklariert. Effekte, die ihn verwenden, erhalten den Service in ihrem R-Kanal.

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>

Anforderungen werden im Typ sichtbar

Beachten Sie, dass der R-Kanal jetzt Random enthält. Der Effekt kann nicht ausgeführt werden, bevor diese Anforderung erfüllt ist. Der Compiler erzwingt dies.

Mit einem Layer bereitstellen

Ein Layer beschreibt, wie ein Service erstellt wird. Durch die Bereitstellung eines Layers wird die Anforderung erfüllt und aus R entfernt.

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

Layer lassen sich kombinieren

Layer können von anderen Layern abhängen und miteinander zusammengeführt werden, um einen vollständigen Abhängigkeitsgraphen aufzubauen. Effect verbindet sie anhand ihrer Typen in der richtigen Reihenfolge.

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

Testen durch Austauschen von Layern

Da Abhängigkeiten explizit sind, stellen Tests einen anderen Layer bereit, zum Beispiel einen deterministischen Random, ohne das zu testende Programm anzupassen. Das ist ein großer Vorteil der Nachverfolgung von Anforderungen.

import { Layer, Effect } from "effect";

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

Warum das wichtig ist

Die Fehler- und Anforderungskanäle machen unsichtbare Annahmen zu vom Compiler geprüften Verträgen: Jeder Fehler muss behandelt oder deklariert werden, und jede Abhängigkeit muss bereitgestellt werden. Das macht große Effect-Programme robust und gut testbar.

Kurzer Check

Überprüfen Sie Ihr Verständnis von Fehlerkanälen und Abhängigkeiten.

Zusammenfassung

Der Fehlerkanal verfolgt typisierte Fehler (Effect.fail), die durch catchTag/catchAll eingegrenzt werden und sich beim Komponieren zu Unions verbinden. Der Anforderungskanal verfolgt Services, die über Context.Tag deklariert und durch Layers mit Effect.provide erfüllt werden. Zusammen sorgen sie dafür, dass Fehler und Abhängigkeiten vom Compiler geprüft werden, und ermöglichen durch den Austausch von Layern einfaches Testen.

Kostenlos starten

Lerne TypeScript mit einem KI-Tutor — kostenlos

Schreibe und führe echten Code in deinem Browser aus, bekomme sofortige Hilfe von einem 24/7 KI-Tutor und setze dein Lernen im Web oder in der App fort.

Kurse
101
Lektionen
352

Häufig gestellte Fragen

Ist die Lektion „Fehlerkanäle und Abhängigkeiten“ kostenlos?

Ja — der vollständige Text von „Fehlerkanäle und Abhängigkeiten“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des TypeScript Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der TypeScript Academy-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „Fehlerkanäle und Abhängigkeiten“?

Verfolgen Sie typisierte Fehler und injizierte Abhängigkeiten in Effekten. Du übst TypeScript Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um TypeScript Academy zu starten?

Keine Vorkenntnisse erforderlich. TypeScript Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 4 von 4.

Wie lange dauert die Lektion „Fehlerkanäle und Abhängigkeiten“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser TypeScript Academy-Lektion Code schreiben und ausführen?

Ja. Jede TypeScript Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. Warum Effektsysteme wichtig sind
  2. Der Effect-Typ
  3. Effekte komponieren
  4. Fehlerkanäle und Abhängigkeiten
← Zurück zu TypeScript Academy