Génération de types

JSON vers TypeScriptdes types qui reflètent les écarts entre réponses

Comparez le champ tag absent et la valeur null de score dans l’exemple. Choisissez le mode Schema si vous disposez d’un contrat.

JSON vers TypeScript

Entrée JSON

Analyse et génération dans ce navigateur. Les données ne sont ni envoyées ni enregistrées.

Résultat TypeScript

Options de génération

Les champs absents deviennent optionnels ; null reste null. Les tableaux vides deviennent unknown[]. Activez strictNullChecks dans le projet.

3 déclarations · 1 propriétés optionnelles

JSON vers TypeScript aide à construire un premier modèle de réponse API. Un seul exemple réussi peut masquer les champs parfois absents : réunissez plusieurs enregistrements représentatifs dans un tableau avant de reprendre les déclarations.

Ce convertisseur JSON en TypeScript distingue une propriété manquante d’une valeur explicitement nulle. Le résultat reste une base de travail à confronter au contrat de votre API, surtout pour les cas d’erreur et les variantes encore absentes de l’échantillon.

Pourquoi utiliser JSON vers TypeScript ici ?

Comparer tous les enregistrements

JSON vers TypeScript examine chaque élément fourni. Si tag manque dans un objet, ce champ devient optionnel. Si score vaut parfois null et parfois un nombre, son type devient une union. Ces différences restent distinctes dans le résultat.

Deux enregistrements réunis en un type, avec un repère pointillé pour un champ absent et un repère creux pour null.

Ajouter ce que le contrat sait déjà

Un Schema peut indiquer les champs obligatoires et les valeurs enum qu’un exemple ne révèle pas. Sélectionnez ce mode explicitement. Une contrainte non prise en charge bloque la génération et indique son chemin au lieu d’être ignorée.

Un échantillon et un contrat de structure suivent deux chemins vers des cartes de déclarations de types.

Trois vérifications avant l’export

01

Réunir les variantes au même endroit

Placez les enregistrements dans un tableau JSON valide. Les objets sont comparés à la même position structurelle ; des propriétés homonymes ailleurs dans le document ne deviennent pas automatiquement un même modèle.

02

Choisir le mode avant l’exemple

Changer de mode conserve le texte. Le bouton Exemple charge ensuite un contenu adapté. En mode Schema, required détermine les champs obligatoires ; l’option qui rend tous les champs facultatifs ne concerne que les échantillons.

03

Attendre un résultat à jour

La génération automatique attend 350 ms après une modification. Désactivez-la pour afficher Générer, ou utilisez Ctrl/Cmd+Enter. Toute modification bloque l’export jusqu’au prochain succès. Le nom Root sert de base aux noms imbriqués.

Des valeurs aux déclarations nommées

Inférence de types sur tout le tableau

Des nombres et des chaînes au même endroit forment une union. Les tableaux imbriqués sont aussi analysés. Un tableau vide utilise les indices d’autres tableaux non vides à la même position ; sans aucun élément connu, son type reste unknown[].

Absence et valeur null

Un champ absent de certains objets reçoit ?. Une valeur présente et nulle reste null ou membre d’une union. Une valeur uniquement nulle ne permet pas de deviner string ou number. Activez strictNullChecks pour exploiter cette distinction dans le projet.

Un générateur d’interfaces TypeScript avec des noms

Les objets imbriqués obtiennent des noms dérivés du parent, avec des suffixes numériques stables en cas de collision. Les clés gardent leur orthographe, avec des guillemets si nécessaire. Le nom racine accepte un identifiant ASCII de 64 caractères maximum, hors mots réservés.

Un sous-ensemble explicite de Schema

Le mode auxiliaire accepte type, properties, required, un Schema items unique, additionalProperties booléen, enum/const scalaires et anyOf limité. Les Schemas booléens sont acceptés. Choisissez interface ou type, export et deux ou quatre espaces. integer devient number.

Les limites de l’inférence

Un échantillon ne décrit pas toute l’API
Seules les valeurs fournies servent à l’inférence. La fusion par champ ne conserve pas les corrélations avec un discriminant. Les dates et UUID restent des chaînes ; les ensembles de valeurs enum ne sont pas devinés. Complétez les variantes manquantes.
Aucune validation à l’exécution
Les déclarations ne génèrent ni parseur, ni classe, ni schéma Zod, ni sérialiseur. number ne garantit pas les entiers ou leur précision. additionalProperties=false retire la signature d’index sans imposer des objets exacts lors de l’exécution.
Les contraintes inconnues bloquent la génération
Références, définitions, oneOf/allOf, conditions, formats, motifs, longueurs, bornes et tuples sont refusés. Les mots-clés d’objet ou de tableau exigent un type explicite adapté. Pas de Schema dans additionalProperties, ni d’objets ou tableaux dans enum ; les littéraux numériques trop grands sont refusés.
Un seul document JSON strict
Commentaires, virgules finales, clés répétées et JSONL arrêtent la conversion. Les erreurs de syntaxe donnent ligne et colonne. Pas de réparation, récupération d’URL, import de fichier ou traitement par lot. Un champ type n’active jamais automatiquement le mode Schema.
Des limites sans sortie tronquée
Maximum : 500 000 caractères en entrée, profondeur 100, 50 000 nœuds, 1 000 000 caractères en sortie et 1 000 déclarations. Un dépassement interdit l’export. Un objet vide sans indices reçoit une signature d’index unknown plutôt que le type trop large {}.

Questions sur JSON vers TypeScript

Comment sont gérés les tableaux de types mixtes ?

Les types observés forment une union : un nombre et une chaîne donnent par exemple (number | string)[]. Les objets au même niveau sont fusionnés par champ. Le résultat ne fixe pas la longueur d’un tuple.

Puis-je personnaliser le nom de l’interface racine ?

Oui, modifiez Root dans les options. JSON vers TypeScript utilise ce nom pour la racine et les noms dérivés. Les propriétés conservent leurs noms d’origine ; seuls les identifiants de déclarations sont normalisés.

Que se passe-t-il si les éléments ont des champs différents ?

Tous les objets à cette position participent. Un champ absent d’au moins l’un d’eux est optionnel et ses valeurs observées déterminent son type. Un seul enregistrement ne permet pas de découvrir les omissions possibles.

Comment sont traités les champs optionnels et null ?

L’absence produit ?, tandis qu’une valeur nulle conserve null. Si une propriété contient aussi un nombre, son type est number | null. Rendre tous les champs optionnels est un choix explicite réservé au mode échantillon.

Les dates ou les énumérations sont-elles détectées ?

Les textes ressemblant à des dates restent string. Les valeurs d’un échantillon ne prouvent pas qu’une liste est exhaustive. Pour des valeurs autorisées connues, utilisez enum ou const dans le sous-ensemble Schema accepté.

Un résultat d’inférence à vérifier ?

Commencez avec plusieurs réponses

Utilisez JSON vers TypeScript avec plusieurs variantes de réponse, vérifiez les champs facultatifs et null, puis exportez les déclarations à relire dans votre projet.