JSON vers TypeScript

Collez un exemple JSON et l’outil infère des interfaces TypeScript qui correspondent à sa structure. Les champs sont typés par les valeurs observées (string, number, boolean, Array<T>), les objets imbriqués obtiennent leurs propres interfaces nommées, et les champs observés comme null ou manquants deviennent optionnels (?) ou nullables (| null) selon le style que vous préférez.

Comment convertir JSON en TypeScript

  1. 1

    Collez JSON

    Un seul exemple suffit ; plusieurs exemples améliorent l'inférence de nullabilité et d'union.

  2. 2

    Choisissez le style de sortie

    `interface` (par défaut), alias `type`, ou interface en lecture seule avec tous les champs marqués `readonly`.

  3. 3

    Choisissez la stratégie optionnelle

    Marquez les champs `?` (peut être absent) ou `| null` (toujours présent, peut être null).

  4. 4

    Copiez les types

    Collez dans un fichier `.ts` et vous avez un accès fortement typé à la réponse de l'API.

Exemple

Entrée :

{ "id": 1, "name": "Alice", "age": null, "tags": ["admin", "user"], "address": { "city": "Madrid" } }

Sortie :

interface User {
  id: number;
  name: string;
  age: number | null;
  tags: string[];
  address: Address;
}

interface Address {
  city: string;
}

Mappage des types

JSON TypeScript
chaîne string
entier / décimal number
booléen boolean
null seul null
null + T T | null (ou T?)
tableau de T T[]
tableau mixte (T1 | T2)[]
objet Interface imbriquée nommée
tableau vide unknown[] (ne peut pas être inféré)

Optionnel vs nullable

  • foo?: string, le champ peut être absent de l’objet. La vérification undefined s’applique.
  • foo: string | null, le champ est toujours présent mais peut explicitement être null.
  • foo?: string | null, peut être absent OU null.

JSON lui-même n’a pas undefined, mais les API varient sur la façon dont elles signalent l’absence. Adaptez-vous à la sémantique de votre API :

  • Les API REST omettent généralement les champs manquants -> ?:.
  • GraphQL renvoie toujours chaque champ demandé -> | null.
  • Certains SDK utilisent les deux dans différents contextes.

Types d’union vs types littéraux

Si l’outil voit le même champ de chaîne avec un petit ensemble de valeurs à travers les exemples ("status": "pending", "active", "archived"), il peut émettre une union littérale de chaînes :

status: "pending" | "active" | "archived";

Activez “inférer des unions littérales de chaînes” si vous le souhaitez.

Erreurs courantes

  • Inférer à partir d’un seul exemple. Chaque champ devient requis ; la nullabilité ne peut pas être observée. Passez 5-10 exemples variés pour de meilleurs types.
  • Tableaux vides. "tags": [] ne donne aucune information de type, le générateur émet unknown[]. Fournissez un exemple avec au moins un élément.
  • Tableaux de types mixtes. [1, "deux", true] produit (number | string | boolean)[]. Cela signifie généralement que le JSON devrait être restructuré plutôt que typé.
  • Clés de chaîne numériques. JSON {"1": "a", "2": "b"} est toujours un objet en TypeScript (Record<string, string>), pas un tableau. Le générateur gère cela correctement.

Questions fréquentes

Adaptez-vous à votre API. Les API REST qui suppriment les champs null veulent ?:. GraphQL, qui renvoie toujours chaque champ sélectionné, veut | null. En cas de doute, T | null avec une syntaxe requise est plus stricte et attrape plus de bugs à la compilation.

Oui, si vous l’activez et fournissez plusieurs exemples. Un champ observé avec 2-5 valeurs de chaîne distinctes à travers les exemples est émis comme une union littérale. Au-delà de ce seuil, il revient à string.

interface pour la plupart des cas, elle est ouverte à l’extension et TypeScript l’optimise mieux. Les alias type sont utiles pour les unions, les intersections, les tuples et les types mappés. Pour les types dérivés de JSON, les deux fonctionnent ; choisissez une convention de projet.

Oui. Chaque objet imbriqué devient sa propre interface, avec des noms dérivés de la clé (user.address -> Address). Pour des structures très profondes ou répétitives, envisagez un schéma JSON et un générateur dédié de schéma à TS.

Outils similaires

Outil disponible dans d’autres langues