almessadi.
Zur Übersicht

TypeScript benötigt weiterhin zur Laufzeit Validierung an der Grenze_

TypeScript ist hervorragend für interne Korrektheit, aber sobald Daten eine Vertrauensgrenze überschreiten, benötigen Sie ausführbare Validierung. Genau deshalb passt Zod so gut in Full-Stack-TypeScript-Apps.

Veröffentlicht4. August 2024
Lesezeit10 min read

TypeScript macht Anwendungscode sicherer. Es validiert keine untrusted Eingaben zur Laufzeit.

Das klingt offensichtlich, aber Teams fassen diese beiden Ideen immer noch zusammen. Sie modellieren einen Anfrage-Payload als Schnittstelle, gießen die eingehenden Daten und sind überrascht, dass das System trotzdem fehlerhafte Eingaben akzeptiert.

Der Grund ist einfach: Schnittstellen verschwinden zur Laufzeit.

Wo das Problem Tatsächlich Beginnt

Dies sind Vertrauensgrenzen:

  • Anfragekörper
  • Abfrageparameter
  • Umgebungsvariablen
  • Webhook-Payloads
  • Lokaler Speicher und Formulardaten
  • Antworten von Drittanbieter-APIs

Jenseits dieser Grenzen sind die Daten einfach unknown. Wenn Sie die Validierung dort überspringen, schützt TypeScript nichts Bedeutendes mehr.

Warum Zod Gut Funktioniert

Zod ist nützlich, weil das Schema als ausführbarer Code existiert:

import { z } from "zod";

export const CreateUserSchema = z.object({
  email: z.string().email(),
  age: z.number().int().positive(),
  name: z.string().min(1),
});

Sie können eingehende Daten direkt validieren:

const result = CreateUserSchema.safeParse(req.body);

if (!result.success) {
  return res.status(400).json({
    error: "Ungültiger Payload",
    details: result.error.flatten(),
  });
}

await db.user.create({ data: result.data });

Jetzt ist die Validierungslogik echt, nicht nur angedeutet.

Der Beste Teil in TypeScript-Projekten

Sie erhalten weiterhin starke Typen aus demselben Schema:

type CreateUserInput = z.infer<typeof CreateUserSchema>;

Deshalb fühlt sich Zod in Full-Stack-TypeScript-Anwendungen so natürlich an. Sie müssen sich nicht zwischen Laufzeitvalidierung und Compile-Zeit-Ergonomie entscheiden.

Der Kompromiss

Der Kompromiss ist die Eindeutigkeit. Sie schreiben absichtlich Schemas, pflegen sie und entscheiden, wo die Validierung hingehört. Das ist Arbeit. Es ist jedoch viel bessere Arbeit, als fehlerhafte Payloads zu debuggen, nachdem sie tief im System angekommen sind.

SEO und Produktimpact

Validierung ist kein reines Backend-Anliegen. Sauberere Validierung führt zu besserem Fehlerhandling, stabileren Formularen, weniger unterbrochenen Benutzerflüssen und besserem durchsuchbarem Anwendungsverhalten, wenn Serverantworten vorhersehbar bleiben. Das hilft sowohl der Zuverlässigkeit als auch dem Vertrauen der Benutzer.

Weiterführende Literatur