Aller au contenu

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.

TypeScript

Zod Schema

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

  1. Collez des interfaces ou des alias de type TypeScript ; ajoutez des balises JSDoc comme @minimum 13 ou @format email pour obtenir des validateurs.
  2. 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.
  3. 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.

Spécifications et références