Mode d'emploi
- Collez une valeur JSON typique dans Échantillon JSON. Les types apparaissent pendant la saisie.
- Saisissez un nom sous Nom de l'interface racine pour l'objet le plus extérieur, comme Product.
- Décochez Écrire export devant chaque déclaration si les types restent dans le même fichier.
- Copiez les Interfaces TypeScript, ou téléchargez-les sous le nom types.ts.
Comment les types sont déduits
Chaque objet JSON devient une interface. Son nom vient de la clé qui le contient, en PascalCase : la clé first-name donne FirstName. Les éléments d'un tableau prennent le singulier de la clé du tableau, si bien que items donne Item. Lorsqu'un nom est déjà pris, le nom du parent est placé devant lui.
Les chaînes, les nombres et les booléens deviennent string, number et boolean. null s'écrit null dans une union, comme number | null. Un tableau de valeurs devient un type suivi de [] ; un tableau vide devient unknown[], car l'échantillon ne dit pas ce qu'il contient.
clé "first-name" -> propriété "first-name": string; items -> Item[]
Plusieurs échantillons dans un tableau
Une liste d'objets est lue comme une seule forme. Une clé présente dans chaque élément est obligatoire ; une clé absente de certains éléments est écrite avec un point d'interrogation, comme optionnelle. Une clé qui porte des types différents selon les éléments devient une union, avec string d'abord, puis number, boolean, l'interface, le tableau et null.
Un échantillon ne montre que les valeurs qu'il contient. Une clé qu'une vraie API omet parfois peut manquer dans un seul exemple : ajoutez donc un second élément qui la contient si vous voulez que le type la montre comme optionnelle.
Exemple détaillé : l'échantillon par défaut
L'échantillon par défaut est un objet à cinq clés. Sa clé owner contient un objet, donc le code a une interface Owner. Sa clé items est un tableau de deux objets, donc le code a une interface Item. Les clés sku et price figurent dans les deux éléments et sont obligatoires ; la clé discount vaut null dans un élément et un nombre dans l'autre, donc elle vaut number | null ; la clé note n'apparaît que dans un élément et est optionnelle.
Le résultat compte trois déclarations : Root, Owner et Item, et le compteur affiche 3.
Questions fréquentes
Pourquoi un champ est-il marqué d'un point d'interrogation ?
Le champ manque dans au moins un objet de l'échantillon. Un tel champ peut être absent des données réelles : TypeScript le traite donc comme optionnel, et le code qui le lit doit le vérifier d'abord.
Pourquoi mon champ affiche-t-il une union comme string | number ?
Des éléments différents portent des types différents pour cette clé. Le type liste tous les types vus dans l'échantillon, si bien que le code doit vérifier lequel il a avant d'utiliser la valeur.
L'outil vérifie-t-il mes vraies données d'API ?
Non. Il écrit les types de l'échantillon que vous collez. Un échantillon d'un seul élément ne peut pas montrer un champ qui n'apparaît que plus tard : utilisez donc une réponse typique avec plusieurs éléments lorsque c'est possible.
Pourquoi certains noms de propriété sont-ils entre guillemets ?
Un nom qui n'est pas un identifiant simple, comme first-name ou 2fa, doit être mis entre guillemets en TypeScript. Les noms qui sont des identifiants valides sont écrits sans guillemets.
Puis-je utiliser le résultat avec JavaScript ?
Les interfaces sont propres à TypeScript. Elles sont supprimées à la compilation : un projet JavaScript doit donc vérifier le JSON autrement, ou passer par une étape de compilation TypeScript.
Sources
- TypeScript (en anglais) : Handbook, object types, interfaces and optional properties
- RFC 8259 (en anglais) : The JavaScript Object Notation (JSON) Data Interchange Format
Chiffres et texte vérifiés pour la dernière fois le mardi 10 novembre 2026.