Ce que fait cet outil
Un échantillon JSON devient des types TypeScript, une interface nommée par objet.
{ "id": 1, "name": "Ada", "address": { "city": "Paris" } }
export interface Root {
id: number;
name: string;
address: Address;
}
export interface Address {
city: string;
}
interface ou type, exporté ou non, et le nom de la racine : à vous de régler.
Une liste à la racine a enfin un nom
Un tableau d’objets est l’échantillon le plus courant qui soit : c’est ce que rend un point d’entrée de liste. La sortie ne donnait que l’interface de l’élément :
export interface UsersItem {
id: number;
}
et le nom racine que vous aviez saisi n’allait nulle part. La liste elle-même est maintenant nommée :
export type Users = UsersItem[];
export interface UsersItem {
id: number;
}
C’était un défaut, trouvé en écrivant cette page puis corrigé. Les générateurs Zod et io-ts de ce site émettaient déjà leur racine ; TypeScript, non.
Même nom, forme différente
Les noms de types viennent des clés : deux branches peuvent vouloir Address toutes les deux. Quand les formes diffèrent, la seconde devient Address2 au lieu d’être fondue dans un type qui ne convient à aucune. Quand les formes sont identiques, une seule définition est partagée — un Address référencé deux fois.
Ce qu’un échantillon ne peut pas dire
Rien n’est marqué optionnel, et c’est délibéré : une clé vue une fois dit qu’elle peut apparaître, pas qu’elle apparaît toujours. "nickname": null donne nickname: null, parce que c’est tout ce que contient l’échantillon — élargissez-le vous-même en string | null quand vous le saurez.
Un identifiant de vingt chiffres est typé number, et un nombre JavaScript ne le contient pas : au-delà de 2^53, la valeur change à l’analyse. Le type ne ment pas sur l’échantillon, il hérite d’une limite du langage — si le champ est un identifiant flocon, mettez-le en string et tenez-le hors de JSON.parse.
Une clé répétée est refusée
{"a": 1, "a": "x"} rendait a: string, la dernière occurrence l’emportant en silence. Deux valeurs, une clé, aucun moyen de dire quel type porte le champ : la conversion s’arrête maintenant et déclare le document ambigu. C’est déjà la réponse que le validateur JSON d’ici donnait au même document.
Confidentiel par conception
Tout s’exécute localement dans votre navigateur en JavaScript. Vos données ne sont jamais envoyées sur un serveur, ce qui rend l’outil sûr pour des contenus sensibles, et il fonctionne hors ligne.