Convertir TypeScript en schéma Zod — Numio
Génère des schémas Zod à partir d’interfaces et de types TypeScript avec ts-to-zod. Chaque type Foo devient un fooSchema exporté, et les balises JSDoc comme @format email ou @minimum deviennent des validateurs Zod.
Les types de votre API existent déjà sous forme d’interfaces TypeScript et vous voulez valider à l’exécution les requêtes entrantes sans écrire de schémas à la main.
Quand l’utiliser
- Les types de votre API existent déjà sous forme d’interfaces TypeScript et vous voulez valider à l’exécution les requêtes entrantes sans écrire de schémas à la main.
- Vous validez des saisies de formulaire avec Zod et voulez que le schéma reste cohérent avec le type TypeScript partagé.
Mode d’emploi
- Collez des interfaces ou des alias de type TypeScript ; ajoutez des balises JSDoc comme @minimum 13 ou @format email pour obtenir des validateurs.
- Dans les paramètres, activez Keep TSDoc Comments pour recopier les commentaires dans la sortie, ou Skip the creation of zod validators from JSDoc annotations pour ignorer les balises.
- Le source est converti sur le serveur via /api/typescript-to-zod ; copiez le code qui importe z depuis "zod".
TypeScript
export interface Signup {
/**
* @format email
*/
email: string;
/**
* @minimum 13
* @maximum 120
*/
age: number;
plan: "free" | "pro";
referrer?: string | null;
createdAt: Date;
}Schémas Zod
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(),
})Détails et limites
La page envoie votre saisie à une route serveur (/api/typescript-to-zod) pour la conversion ; elle n’est pas traitée uniquement dans le navigateur. Par défaut, les routes API de Next.js acceptent des corps de requête jusqu’à 1 Mo.
Seuls les types sont convertis. Les fonctions et constantes exportées ne produisent aucun schéma.
Si un type fait référence à un type absent de l’entrée, le convertisseur signale une erreur de dépendance manquante au lieu d’émettre un schéma.
Les schémas sont ordonnés selon leurs dépendances : un type référencé comme Author est émis avant le type qui l’utilise.
FAQ
Comment les champs optionnels et null sont-ils convertis ?
referrer?: string | null devient z.string().optional().nullable() ; une propriété de type Author | null devient authorSchema.nullable().
Comment Date est-il traité ?
Une propriété Date devient z.date(), qui accepte des objets Date, pas des chaînes ISO. Utilisez z.coerce.date() pour une entrée JSON.
Pourquoi ai-je l’erreur "Some schemas can't be generated due to direct or indirect missing dependencies" ?
Un type fait référence à un autre type absent du code collé. Collez aussi les types référencés.