Result-Typen modellieren
Repräsentieren Sie Erfolg und Fehler mit Result als Daten.
Result-Typen modellieren ist eine kostenlose TypeScript Academy-Lektion auf CoddyKit. Dies ist Lektion 2 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.
Der Result-Typ
Ein Result bildet eine Operation ab, die entweder mit einem Wert erfolgreich ist oder mit einem Fehler scheitert. Es handelt sich um eine diskriminierte Union, die Sie anstelle einer Ausnahme zurückgeben können.
Result definieren
Die klassische Struktur verwendet ok als Diskriminator. Wenn ok wahr ist, gibt es einen value; wenn es falsch ist, gibt es einen error.
type Result<T, E> =
| { ok: true; value: T }
| { ok: false; error: E };Konstruktor-Hilfsfunktionen
Kleine Hilfsfunktionen wie ok und err machen das Erstellen von Ergebnissen kurz und gut lesbar, statt jedes Mal die Objektliterale von Hand zu schreiben.
const ok = <T>(value: T): Result<T, never> => ({ ok: true, value });
const err = <E>(error: E): Result<never, E> => ({ ok: false, error });Ein Result zurückgeben
Eine potenziell fehlschlagende Funktion gibt ok(value) oder err(error) zurück. Der Rückgabetyp weist jeden aufrufenden Code auf beide Möglichkeiten hin.
function divide(a: number, b: number): Result<number, string> {
return b === 0 ? err("divide by zero") : ok(a / b);
}Typeneingrenzung anhand von ok
Die Prüfung von result.ok grenzt die Union ein. Im wahren Zweig weiß TypeScript, dass value vorhanden ist; im falschen Zweig weiß es, dass error vorhanden ist.
const r = divide(10, 2);
if (r.ok) console.log(r.value); // 5
else console.log(r.error);Der Diskriminator sorgt für Sicherheit
Das Feld ok ist der Diskriminator, anhand dessen der Compiler den richtigen Zweig auswählen kann. Sie können nicht auf value zugreifen, ohne zuvor nachzuweisen, dass ok wahr ist.
const r = divide(1, 0);
// r.value here is a type error until we check r.ok
if (!r.ok) console.log("err:", r.error);Typisierte Fehler
Fehler können mehr als nur Zeichenfolgen sein. Eine typisierte Fehler-Union ermöglicht es dem aufrufenden Code, nach der Typeneingrenzung jede Fehlerart präzise zu behandeln.
type DivErr = { kind: "zero" } | { kind: "overflow" };
function div(a: number, b: number): Result<number, DivErr> {
if (b === 0) return err({ kind: "zero" });
return ok(a / b);
}Vollständige Fehlerbehandlung
Da der Fehlertyp eine Union ist, kann ein switch über seinen Diskriminator auf Vollständigkeit geprüft werden. So wird sichergestellt, dass jeder Fehlerfall behandelt wird.
const r = div(1, 0);
if (!r.ok) {
switch (r.error.kind) {
case "zero": console.log("no zero"); break;
case "overflow": console.log("too big"); break;
}
}Eine Hilfsfunktion für Standardwerte
Manchmal benötigen Sie einfach den Wert oder einen Ersatzwert. Ein kleines unwrapOr ist gut lesbar und hält die Fehlerbehandlung lokal.
function unwrapOr<T, E>(r: Result<T, E>, fallback: T): T {
return r.ok ? r.value : fallback;
}
console.log(unwrapOr(divide(1, 0), -1)); // -1Result im Vergleich zu Ausnahmen
Result verschiebt den Fehler in den Rückgabetyp, sodass aufrufender Code sich damit auseinandersetzen muss. Der Nachteil ist ausführlicherer Code, der sich bei erwarteten Fehlern normalerweise lohnt.
Ein vollständiges Beispiel
Alles zusammengefasst: Definieren Sie Hilfsfunktionen, geben Sie Ergebnisse zurück und grenzen Sie den Typ vor der Verwendung ein. Der Compiler garantiert, dass der Fehlerzweig berücksichtigt wird.
function safeParse(s: string): Result<number, string> {
const n = Number(s);
return Number.isNaN(n) ? err("NaN") : ok(n);
}
const p = safeParse("42");
console.log(p.ok ? p.value : p.error); // 42Kurzer Check
Kurzer Check zu dieser Lektion.
Rückblick
Result<T, E> ist eine diskriminierte Union aus { ok: true; value } oder { ok: false; error }. Erstellen Sie sie mit den Hilfsfunktionen ok/err und grenzen Sie den Typ anhand von ok ein, um sicher auf value oder error zuzugreifen. Typisierte Fehler ermöglichen eine vollständige Behandlung.
Häufig gestellte Fragen
Ist die Lektion „Result-Typen modellieren“ kostenlos?
Ja — der vollständige Text von „Result-Typen modellieren“ 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 „Result-Typen modellieren“?
Repräsentieren Sie Erfolg und Fehler mit Result als Daten. 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 2 von 4.
Wie lange dauert die Lektion „Result-Typen modellieren“?
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
- Das Problem mit dem Auslösen von Fehlern
- Result-Typen modellieren
- Option- und Maybe-Typen
- Railway-Oriented Programming