JSON vers TypeScript
Collez un exemple de vos données JSON et obtenez les types TypeScript qui les décrivent.
Chargement de JSON vers TypeScript… Si rien ne se passe, activez JavaScript.
Écrire à la main les types TypeScript d'une réponse d'API est long et source d'erreurs, surtout quand les données sont profondes ou que certains champs n'apparaissent que de temps en temps. Collez un vrai exemple JSON dans cet outil et il déduit les types pour vous pendant que vous tapez. Chaque objet imbriqué devient sa propre interface nommée, d'après la clé qui le contient convertie en PascalCase : une clé address donne une interface Address et un tableau projects donne une interface Project pour ses éléments. Les objets qui ont exactement la même forme sont déclarés une seule fois puis réutilisés, et les noms qui entreraient en conflit entre eux ou avec des types intégrés comme Date, Response ou Location reçoivent un suffixe, pour que le résultat compile tel quel.
Questions fréquentes
Comment les objets imbriqués deviennent-ils des interfaces ?
Pourquoi un champ est-il marqué optionnel ?
Puis-je coller du JSON Lines ou plusieurs échantillons ?
Que deviennent les tableaux vides et les valeurs null ?
Les chaînes de date sont-elles converties en Date ?
Faut-il choisir interface ou type ?
À quoi sert l'onglet JSON Schema ?
Mon JSON est-il envoyé à un serveur ?
À propos de JSON vers TypeScript
Plus vous fournissez d'échantillons, meilleurs sont les types. Collez un tableau d'enregistrements, plusieurs documents JSON au format JSON Lines (un objet par ligne, comme dans les fichiers de logs et les exports NDJSON), ou cochez l'option qui traite un tableau de premier niveau comme une liste d'échantillons. L'outil fusionne toutes les valeurs rencontrées à la même position : un champ absent de certains objets devient optionnel, un champ parfois null reçoit | null (ou devient optionnel, si vous préférez ce style), une valeur qui est une chaîne dans un enregistrement et un nombre dans un autre devient une union, et les tableaux d'éléments variés donnent (A | B)[]. Les tableaux toujours vides sont typés unknown[] et les champs qui n'ont jamais été que null sont typés null, et les deux cas figurent dans les notes pour que vous sachiez lesquels compléter à la main. Les clés qui ne sont pas des identifiants valides, comme content-type ou 2fa, sont mises entre guillemets automatiquement.
Vous contrôlez le style du résultat : le nom du type racine, interface ou alias type, l'export des déclarations, les propriétés et tableaux readonly, et les points-virgules. Un second onglet produit un JSON Schema (draft 2020-12) à partir de la même déduction, avec les objets imbriqués dans $defs, des listes required pour les champs présents dans tous les échantillons, la distinction entre integer et number, et un format date-time ou date pour les chaînes qui ressemblent à des dates ISO 8601. JSON n'a pas de type date, ces champs restent donc des string en TypeScript. Les deux résultats peuvent être copiés ou téléchargés sous forme de fichier .ts ou .schema.json. Tout se passe dans votre navigateur, vos réponses d'API privées et les données de vos clients ne quittent jamais votre appareil.
Le système de types de TypeScript est Turing-complet
Les types de TypeScript devaient décrire des valeurs JavaScript, mais les types conditionnels, les alias récursifs et les template literal types ont fait du vérificateur de types un petit langage de programmation à part entière. En 2017, une issue GitHub a montré que le système de types est Turing-complet, et depuis, certains écrivent des parseurs, de l'arithmétique et de petits interpréteurs qui s'exécutent entièrement dans le compilateur et rendent leurs résultats sous forme de types.
Le versant pratique, c'est le typage structurel. TypeScript ne se soucie pas du nom d'une interface, seulement de sa forme : un objet qui possède les bons champs satisfait une interface qu'il n'a jamais vue. C'est pour cela que des types générés à partir d'un échantillon JSON s'intègrent si bien : ils décrivent la forme des données, et toute valeur de cette forme est acceptée.