UTILS.
100 % dans le navigateur
📘

JSON Schema vers TypeScript

Compilez un JSON Schema (draft-07 ou 2020-12) en interfaces et alias de type TypeScript, en gérant required, les enums, $ref, les tableaux et les combinateurs.

sortie

À propos de cet outil

L'outil JSON Schema vers TypeScript compile un document JSON Schema en interfaces et alias de type TypeScript, faisant ce que la populaire bibliothèque json-schema-to-typescript fait sans installer de chaîne d'outils. Contrairement aux convertisseurs d'exemples JSON, celui-ci lit un véritable schéma : il parcourt l'objet schéma et transforme type:'object' en une interface où les clés listées dans required sont non optionnelles et les autres sont marquées d'un ?.

Tout est analysé et généré localement dans votre navigateur avec JSON.parse et du JavaScript standard, si bien que votre schéma ne quitte jamais la page. Les schémas de chaîne avec un enum deviennent une union de littéraux de chaîne ; les string, number/integer, boolean et null simples correspondent à leurs équivalents TypeScript ; les tableaux deviennent T[] (un tuple quand items est un tableau). Les combinateurs sont pris en charge — allOf devient une intersection (A & B) et anyOf / oneOf deviennent des unions (A | B) — et un type nullable type:[T,'null'] devient T | null.

Les références sont résolues par nom : un $ref pointant vers #/definitions/X ou #/$defs/X émet une référence de type nommée, et chaque définition est générée comme sa propre export interface ou export type. additionalProperties ajoute une signature d'index [key: string]: T. Le nom du type racine se rabat sur le title ou le $id du schéma. Basculez la sortie interface-ou-type et le fait que les chaînes description du schéma deviennent des commentaires JSDoc /** */. Copiez le résultat ou téléchargez un fichier .ts.

Foire aux questions

Quelles fonctionnalités de JSON Schema sont prises en charge ?
object avec properties et required, les enums de chaîne en unions de littéraux, number/integer/boolean/null, les tableaux (y compris les tuples), les combinateurs allOf/anyOf/oneOf, $ref vers definitions ou $defs, additionalProperties en signature d'index, et les tableaux de types nullables comme ["string","null"].
Comment $ref et definitions sont-ils gérés ?
Un $ref tel que #/definitions/Address (ou #/$defs/Address) devient une référence à un type nommé Address, et chaque entrée sous definitions ou $defs est émise comme sa propre export interface ou export type, de sorte que les références se résolvent dans la sortie.
Qu'est-ce qui nomme le type racine ?
Le champ de nom racine si vous le définissez, sinon le title du schéma, sinon le dernier segment de son $id, sinon Root. Les noms de définition proviennent de leur clé dans definitions ou $defs, convertie en PascalCase.
Puis-je conserver les descriptions du schéma ?
Oui. Avec JSDoc activé (par défaut), toute chaîne description sur le schéma ou une propriété est émise en commentaire /** ... */ au-dessus du type ou champ correspondant, préservant la documentation dans le TypeScript généré.

Plus d'outils