Nouveau

Générateur d'interfaces TypeScript vers schémas Zod (Inférence de type à l'exécution)

Convertissez vos interfaces, alias de types, énumérations et types imbriqués TypeScript en schémas de validation d'exécution Zod avec inférence statique.

Préréglages :
Nommage :
0 Types0 Champs
Code source TypeScript (Interfaces, types & enums)
// Paste TypeScript interfaces, type aliases, or enums to generate Zod schemas.
0
Définitions analysées
0
Propriétés validées
100%
Inférence Zod prête

Synthèse AST 100% côté client

Analysez les interfaces, alias de types et énumérations TypeScript directement dans le navigateur sans télémétrie ni requête serveur.

Inférence de type à l'exécution Zod v3

Génère des z.object récursifs, des unions discriminées, la gestion des optionnels/nullables et export type z.infer<typeof Schema>.

Validation interactive de simulation & AST

Validez instantanément des charges utiles de test contre les schémas générés et inspectez les métadonnées de l'AST.

Référence technique et guide d'architecture

Générateur d'interfaces TypeScript vers schémas Zod (Inférence à l'exécution) Guide Développeur — Guide de référence

Convertissez vos interfaces, alias de types, énumérations et types imbriqués TypeScript en schémas de validation d'exécution Zod avec inférence statique.

Paramètres clés et contrôles

Mode de validation d'objetEnum (strip | strict | passthrough)

Configure la gestion des propriétés non déclarées : 'strip' supprime les clés inconnues, 'strict' lève une erreur de validation et 'passthrough' conserve les champs additionnels intacts.

Par défaut : strip
Export d'inférence de types (z.infer)Boolean (true | false)

Génère les types statiques TypeScript déduits des schémas Zod via 'z.infer<typeof Schema>', assurant une parité parfaite entre le typage statique et la validation à l'exécution.

Par défaut : true
Mode de coercition primitiveBoolean (true | false)

Active les utilitaires de coercition ('z.coerce.string()', 'z.coerce.number()', 'z.coerce.date()', 'z.coerce.boolean()'), indispensables pour analyser les paramètres d'URL, FormData et variables d'environnement.

Par défaut : false
Stratégie de nullabilité et d'optionsEnum (nullish | explicit | strict-optional)

Définit la transcription des champs optionnels et nuls : 'nullish' regroupe 'prop?: T | null' en '.nullish()', tandis qu'explicit produit une chaîne ordonnée '.nullable().optional()'.

Par défaut : nullish

Conseils de pro et bonnes practices

Schémas récursifs avec z.lazy()

Pour les modèles hiérarchiques ou autoréférencés (arborescences, fils de commentaires), encapsulez les propriétés circulaires dans 'z.lazy(() => TargetSchema)' et typez explicitement la variable ('const NodeSchema: z.ZodType<Node> = z.lazy(...)') pour éviter les blocages de compilation.

Pour valider des unions polymorphes

Pour valider des unions polymorphes partageant un discriminant commun (comme 'type' ou 'action'), privilégiez 'z.discriminatedUnion('type', [SchemaA, SchemaB])' plutôt que 'z.union([...])'. Vous bénéficiez d'une résolution en O(1) et de messages d'erreurs ciblés sur le variant défaillant.

Source unique de vérité avec z.infer

Remplacez la maintenance manuelle des interfaces par 'export type User = z.infer<typeof UserSchema>;'. Tout changement apporté aux règles de validation ou valeurs par défaut se propage directement aux types statiques sans dérive.

Lorsque les dates transitent en

Lorsque les dates transitent en chaînes ISO-8601 dans des payloads JSON, combinez 'z.string().datetime()' ou 'z.coerce.date()' avec des règles '.refine()' pour convertir les chaînes en instances Date et sécuriser vos règles métier en périphérie du système.

Pièges courants et dépannage

Erreur TS2454 ou boucle de référence circulaire sur les types autoréférencés

Enveloppez les champs récursifs avec 'z.lazy(() => SchemaName)' et spécifiez une annotation de type explicite ('const Schema: z.ZodType<InterfaceName> = ...') afin de différer l'évaluation du schéma au runtime.

Perte de rigueur causée par les signatures d'index [key: string]: any

Employez 'z.record(z.string(), z.unknown())' pour les dictionnaires dynamiques purs, ou appliquez '.catchall(z.unknown())' sur un schéma 'z.object({...})' pour autoriser des propriétés supplémentaires sans désactiver la validation des champs connus.

Les unions de chaînes littérales génèrent des appels invalides à z.nativeEnum

Assurez-vous que les unions littérales (ex : 'type Statut = "actif" | "inactif"') utilisent 'z.enum(["actif", "inactif"])'. La méthode 'z.nativeEnum()' est strictement réservée aux énumérations 'enum' de TypeScript.

Foire aux questions (FAQ)

Pourquoi convertir des interfaces TypeScript en schémas Zod ?▼

Les types TypeScript sont effacés à la compilation et n'offrent aucune protection à l'exécution. Zod valide et assainit en temps réel les données issues d'APIs, formulaires et webhooks, tout en procurant une inférence statique rigoureuse via 'z.infer'.

Comment le convertisseur distingue-t-il les champs optionnels (?) des types nullables (| null) ?▼

Les champs marqués d'un '?' génèrent '.optional()' ('T | undefined'), alors que '| null' engendre '.nullable()'. Les attributs combinant les deux ('prop?: string | null') sont traduits de manière concise en '.nullish()'.

Les interfaces génériques comme ApiResponse<T> sont-elles prises en charge ?▼

Oui. Les interfaces génériques sont transformées en fonctions d'usine de schémas (par ex. '<T>(itemSchema: z.ZodType<T>) => z.object({ data: itemSchema, count: z.number() })'), préservant la réutilisabilité et la sûreté des types.

Mon code source ou mes interfaces sont-ils envoyés à des serveurs tiers ?▼

Non. L'analyse syntaxique AST et la génération de code s'effectuent à 100 % en local dans votre navigateur. Aucun schéma ou donnée de domaine ne transite sur le réseau.

Les schémas générés s'intègrent-ils avec tRPC, React Hook Form et Next.js Server Actions ?▼

Oui, parfaitement. Le code généré respecte la norme Zod v3 standard et s'utilise directement avec '@hookform/resolvers/zod', les routeurs tRPC et les Server Actions Next.js sans ajustement préalable.

Outils et utilitaires connexes

Tous les outils →