neverthrow für TypeScript: Komplette Anleitung mit Beispielen

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Die neverthrow-Bibliothek für TypeScript: Result-Typ für die Fehlerbehandlung

1. Was ist neverthrow und warum wird es benötigt?

In der modernen TypeScript-Entwicklung wird die Fehlerbehandlung oft zu einem Chaos aus try/catch-Blöcken, die über den gesamten Code verteilt sind. Die Bibliothek neverthrow bietet eine elegante Lösung für dieses Problem, inspiriert von funktionalen Programmiersprachen wie Rust und Haskell. Sie stellt den Typ Result<T, E> bereit, der explizit ein erfolgreiches Ergebnis (Ok) oder einen Fehler (Err) darstellt und die Fehlerbehandlung zu einem Teil des Typsystems macht, anstatt zu einem Nebeneffekt.

Das Hauptziel von neverthrow ist es, implizite Ausnahmen durch explizite Typen zu ersetzen. Anstatt eine Funktion zu schreiben, die jederzeit eine Ausnahme werfen kann, geben Sie ein Result zurück, dessen Verarbeitung der TypeScript-Compiler von Ihnen erzwingt. Das macht den Code vorhersehbarer, sicherer und selbstdokumentierend. Sie müssen nicht mehr raten, welche Funktionen einen Fehler werfen könnten – der Rückgabetyp sagt es Ihnen direkt.

Die Bibliothek ist besonders nützlich in Projekten, bei denen Zuverlässigkeit wichtig ist: Backend-Dienste, Finanzanwendungen, Datenverarbeitungssysteme. Sie lässt sich auch hervorragend mit anderen funktionalen Konzepten wie Option-Typen (Maybe) kombinieren und kann in Bibliotheken wie fp-ts integriert werden. neverthrow ist nicht nur ein Werkzeug, sondern eine Philosophie des Codierens, bei der Fehler Daten und keine Ausnahmesituationen sind.

2. Installation

Installation von neverthrow in ein TypeScript/NPM-Projekt:

npm install neverthrow

Für Projekte, die yarn verwenden:

yarn add neverthrow

Für pnpm:

pnpm add neverthrow

Die Bibliothek ist in TypeScript geschrieben und enthält vollständige Typdefinitionen, daher ist keine zusätzliche Installation von @types erforderlich. Nach der Installation können Sie die wichtigsten Typen und Funktionen importieren:

import { ok, err, Result } from 'neverthrow';

3. Schnellstart – Minimales funktionierendes Beispiel

Erstellen wir eine einfache Funktion, die zwei Zahlen dividiert, aber ein Result zurückgibt, anstatt bei einer Division durch Null eine Ausnahme zu werfen:

import { ok, err, Result } from 'neverthrow';

// Fehlertyp definieren
type DivisionError = { message: string; code: number };

// Funktion, die ein Result zurückgibt
function safeDivide(a: number, b: number): Result<number, DivisionError> {
  if (b === 0) {
    return err({ message: 'Division durch Null', code: 1001 });
  }
  return ok(a / b);
}

// Verwendung
const result = safeDivide(10, 2);

// Ergebnis verarbeiten
if (result.isOk()) {
  console.log('Ergebnis:', result.value); // Ergebnis: 5
} else {
  console.error('Fehler:', result.error.message); // Wird nie ausgeführt
}

const errorResult = safeDivide(10, 0);

if (errorResult.isErr()) {
  console.error('Fehler:', errorResult.error.message); // Fehler: Division durch Null
}

Dieses Beispiel zeigt die grundlegende Idee: Die Funktion gibt immer ein Result zurück, und der aufrufende Code muss prüfen, ob das Ergebnis erfolgreich ist, bevor er den Wert verwendet. Der TypeScript-Compiler erlaubt es Ihnen nicht, einfach auf result.value zuzugreifen, ohne vorher eine Prüfung durchzuführen.

4. Wichtige Methoden/Funktionen/Klassen

4.1. ok(value) – Erstellen eines erfolgreichen Ergebnisses

Signatur:

function ok<T, E = never>(value: T): Ok<T, E>

Was es tut: Erstellt eine Ok-Instanz, die ein erfolgreiches Ergebnis mit dem übergebenen Wert darstellt.

Beispiel:

import { ok } from 'neverthrow';

const success = ok(42);
console.log(success.isOk()); // true
console.log(success.value); // 42

4.2. err(e

Empfehlungen