TypeScript in Zod-Schemas umwandeln — Numio
Erzeugt mit ts-to-zod Zod-Schemas aus TypeScript-Interfaces und -Typen. Jeder Typ Foo wird zu einem exportierten fooSchema, und JSDoc-Tags wie @format email oder @minimum werden zu Zod-Validatoren.
Deine API-Typen existieren bereits als TypeScript-Interfaces, und du willst eingehende Requests zur Laufzeit validieren, ohne Schemas von Hand zu schreiben.
Wann sie hilft
- Deine API-Typen existieren bereits als TypeScript-Interfaces, und du willst eingehende Requests zur Laufzeit validieren, ohne Schemas von Hand zu schreiben.
- Du validierst Formulareingaben mit Zod und willst, dass das Schema mit dem gemeinsamen TypeScript-Typ konsistent bleibt.
Anwendung
- Füge TypeScript-Interfaces oder Typaliase ein; ergänze JSDoc-Tags wie @minimum 13 oder @format email, um Validatoren zu erhalten.
- Aktiviere in den Einstellungen Keep TSDoc Comments, um Kommentare in die Ausgabe zu übernehmen, oder Skip the creation of zod validators from JSDoc annotations, um die Tags zu ignorieren.
- Der Quelltext wird auf dem Server über /api/typescript-to-zod konvertiert; kopiere den Code, der z aus "zod" importiert.
TypeScript
export interface Signup {
/**
* @format email
*/
email: string;
/**
* @minimum 13
* @maximum 120
*/
age: number;
plan: "free" | "pro";
referrer?: string | null;
createdAt: Date;
}Zod-Schemas
import { z } from "zod"
export const signupSchema = z.object({
email: z.string().email(),
age: z.number().min(13).max(120),
plan: z.union([z.literal("free"), z.literal("pro")]),
referrer: z.string().optional().nullable(),
createdAt: z.date(),
})Details und Einschränkungen
Die Seite sendet deine Eingabe zur Konvertierung an eine Server-Route (/api/typescript-to-zod); sie wird nicht nur im Browser verarbeitet. Next.js-API-Routen akzeptieren standardmäßig Request-Bodys bis 1 MB.
Nur Typen werden konvertiert. Exportierte Funktionen und Konstanten erzeugen kein Schema.
Verweist ein Typ auf einen Typ, der nicht in der Eingabe steht, meldet der Konverter einen Fehler wegen fehlender Abhängigkeit, statt ein Schema auszugeben.
Schemas werden nach Abhängigkeiten sortiert, sodass ein referenzierter Typ wie Author vor dem Typ ausgegeben wird, der ihn verwendet.
FAQ
Wie werden optionale und null-Felder konvertiert?
referrer?: string | null wird zu z.string().optional().nullable(); eine Property vom Typ Author | null wird zu authorSchema.nullable().
Wie wird Date behandelt?
Eine Date-Property wird zu z.date(), das Date-Objekte akzeptiert, keine ISO-Strings. Verwende z.coerce.date() für JSON-Eingaben.
Warum erhalte ich "Some schemas can't be generated due to direct or indirect missing dependencies"?
Ein Typ verweist auf einen anderen Typ, der nicht im eingefügten Code steht. Füge die referenzierten Typen ebenfalls ein.