Datenvalidierung in TypeScript: Von der Theorie zur Praxis
Eines der Kernprobleme bei der Entwicklung mit TypeScript ist die Diskrepanz zwischen statischer Typisierung und den tatsächlichen Daten, die aus externen Quellen (APIs, Formulare, localStorage) kommen. TypeScript überprüft Typen zur Kompilierzeit, aber zur Laufzeit verschwinden die Typen. Datenvalidierung ist der Prozess der Überprüfung, ob Daten bestimmten Regeln zur Laufzeit entsprechen, was für die Zuverlässigkeit von Anwendungen entscheidend ist.
In diesem Artikel werden wir uns mit den beliebten Bibliotheken zur Datenvalidierung in TypeScript befassen: Zod, Yup, Joi und class-validator. Wir betrachten ihre Besonderheiten, Anwendungsbeispiele und helfen Ihnen, das passende Werkzeug für Ihr Projekt auszuwählen.
Warum reicht TypeScript allein nicht aus?
TypeScript ist ein Werkzeug für Entwickler. Es hilft, sichereren Code zu schreiben, schützt aber nicht vor:
- Ungültigen Daten aus APIs (das Feld
agekönnte als String"25"kommen) - Fehlenden Pflichtfeldern
- Falschen Formaten (E-Mail, URL, Telefon)
- Werten außerhalb zulässiger Bereiche
Datenvalidierung zur Laufzeit löst diese Probleme, indem sie Daten auf Übereinstimmung mit einem Schema prüft und verständliche Fehler ausgibt.
Zod – Der moderne Standard
Zod ist die beliebteste Bibliothek für Validierung in TypeScript. Ihr Hauptvorteil ist die enge Integration mit dem Typsystem: Aus einem Schema kann automatisch ein Typ abgeleitet werden.
Installation
npm install zodAnwendungsbeispiel
import { z } from 'zod';
// Schema definierenconst UserSchema = z.object({ id: z.number().positive(), email: z.string().email(), age: z.number().min(18).max(120).optional(), role: z.enum(['admin', 'user', 'guest']),});
// Typ aus Schema ableitentype User = z.infer<typeof UserSchema>;
// Validierungconst result = UserSchema.safeParse({ id: 1, email: 'user@example.com', age: 25, role: 'admin',});
if (result.success) { // result.data – korrekte Daten mit dem Typ User console.log(result.data.email);} else { // result.error – detaillierte Fehlerinformationen console.log(result.error.format());}Wichtige Funktionen von Zod:
- Automatische Typableitung mittels
z.infer - Datentransformation (z. B. Umwandlung von Strings in Zahlen)
- Validierung von verschachtelten Objekten und Arrays
- Unterstützung von Union, Intersection, Discriminated Unions
- Refinement – benutzerdefinierte Prüfungen
Yup – Bewährt und zuverlässig
Yup ist eine Bibliothek der Formik-Entwickler. Sie eignet sich ideal für die Formularvalidierung in React. Yup hat eine deklarativere Syntax und ein reichhaltiges Ökosystem.
Beispiel
import * as yup from 'yup';
const schema = yup.object().shape({ name: yup.string().required('Name ist erforderlich'), email: yup.string().email('Ungültige E-Mail').required(), age: yup.number().positive().integer().min(18, 'Alter muss mindestens 18 sein'), tags: yup.array().of(yup.string()).min(1, 'Wählen Sie mindestens ein Tag aus'),});
schema.validate({ name: 'Ivan', email: 'ivan@example.com', age: 25, tags: ['typescript'],}).then(validData => { console.log('Daten sind gültig:', validData);}).catch(err => { console.log('Fehler:', err.errors);});Besonderheiten von Yup:
- Lokalisierung von Fehlermeldungen
- Validierung auf Abruf (lazy validation)
- Wertetransformation (cast)
- Integration mit Formik out-of-the-box
Joi – Leistungsstark und streng
Joi ist eine Bibliothek mit einer riesigen Auswahl an Validatoren. Ursprünglich für Node.js (Hapi.js) entwickelt, funktioniert sie aber auch hervorragend mit TypeScript.
<
Auch in der Bibliothek
Arbeiten mit Excel in Swift: Vollständiger Leitfaden zu Bibliotheken und Tools für iOS/macOS
Objektserialisierung in Node.js: JSON, Buffer und Protobuf
Conan C++: Komplette Anleitung mit Beispielen
ImageSharp für C# (.NET): Komplettguide mit Beispielen