Transformer un exemple JSON en types TypeScript prêts à l'emploi
Vous avez une réponse JSON d'une API et il vous faut un type TypeScript pour elle. Maintenant. Sans écrire chaque champ à la main, sans rater un objet imbriqué trois niveaux plus profond, sans oublier que le champ est parfois `null`. Collez le JSON à gauche, obtenez une `interface` propre à droite.
Le générateur détecte les objets imbriqués et donne à chacun son propre type nommé. Il parcourt les tableaux, choisit le type d'élément et émet `User[]` au lieu d'une longue forme inline. Si les clés sont parfois manquantes ou parfois null, il ajoute un `?`. Si votre tableau contient des objets aux champs légèrement différents, il les fusionne en une super-forme et marque les différences comme optionnelles.
Quatre formats de sortie : une `interface` TypeScript, un alias `type` TypeScript, un schéma runtime Zod (avec `z.infer` pour le type statique), ou un document JSON Schema (pour OpenAPI, AJV, tests de contrat). Tout s'exécute dans votre navigateur, rien ne quitte votre appareil.
Comment l'utiliser
- Collez votre JSON dans le panneau de gauche. L'exemple par défaut est une réponse d'API de commande typique pour que vous voyiez le générateur en action tout de suite.
- Choisissez un format de sortie : interface (le quotidien), alias type (pour les unions ou types mappés), Zod (quand il vous faut aussi de la validation runtime), ou JSON Schema (pour les specs OpenAPI et tests de contrat).
- Définissez le nom du type racine (par défaut `Root`). Bons noms : `User`, `Order`, `ApiResponse`. Le générateur utilise votre nom pour le type top-level et dérive les noms enfants depuis les clés (par ex. `customer` devient `Customer`).
- Activez `unknown` plutôt que `any` pour des types plus sûrs : les tableaux vides deviennent `unknown[]` au lieu de `any[]`, le système de types vous force à narrow avant utilisation.
- Marquer optionnel basé sur null si votre API envoie parfois `"phone": null` : le générateur ajoute `phone?: string` au lieu de `phone: string | null`. Désactivez-le si vous voulez null explicite dans le type.
- Convertir les clés en camelCase si votre JSON utilise du snake_case (`created_at`) et que votre code TypeScript utilise du camelCase (`createdAt`). La clé originale reste en commentaire pour que vous vous souveniez de ce qui est passé sur le réseau.
- Fusionner les formes similaires quand un tableau contient des objets aux champs légèrement différents. Sans ça, vous obtenez une union verbeuse ; avec, vous obtenez une forme propre avec des `?` sur les différences.
- Cliquez sur `Copy` pour mettre le résultat dans le presse-papiers ou `Download` pour le sauvegarder en fichier `.ts` (ou `.json` pour JSON Schema). Collez dans votre projet, terminé.
Quand c'est utile
Cinq situations où ça vous épargne 10 minutes de saisie manuelle :
- Câbler un nouvel endpoint d'API. Vous frappez `/api/orders` et récupérez une grosse réponse JSON. Vous collez ici, obtenez les interfaces `Order`, `Customer`, `Item` en trois secondes. Vous les déposez dans `types.ts`, votre code autocomplète maintenant chaque champ correctement.
- Migrer du JavaScript non typé vers TypeScript. L'ancien code lit des fichiers JSON et suppose la forme. Vous collez un exemple ici, obtenez les types, collez-les en haut du fichier : le compilateur trouve chaque endroit qui touche un champ manquant ou faux.
- Construire un schéma Zod pour un formulaire. Vous connaissez la forme voulue (depuis un JSON exemple), il vous faut de la validation runtime. Basculez en mode Zod, obtenez `z.object({...})` avec les bons validateurs primitifs, déposez dans votre bibliothèque de formulaire (React Hook Form, Formik, TanStack Form).
- Écrire une spec OpenAPI depuis une vraie réponse. Le backend retourne déjà du JSON, il vous faut le décrire en OpenAPI. Basculez en mode JSON Schema, obtenez un document Draft 2020-12 avec `$defs`, collez sous la section de réponse de votre endpoint. Terminé.
- Partager un contrat avec une équipe frontend. Vous avez un payload JSON, vous devez dire à l'autre côté à quoi s'attendre. Générez l'interface, collez-la dans un message Slack ou un doc, les deux équipes ont la même source de vérité.
Vous partez d'une vraie spec ? Utilisez OpenAPI to TypeScript pour des types de requête/réponse complets ou GraphQL to TypeScript pour SDL.