100 % local — vos données ne quittent jamais votre navigateur

JSON en Flow — des alias de types pour le projet

Transformez un échantillon JSON en alias de types Flow. Les objets imbriqués reçoivent leur nom : un payload devient des types qu’on importe où il faut.

Instantané Privé Zéro cookie

Entrée JSON

Sortie Flow

Ce que fait cet outil

Un échantillon JSON devient des alias de types Flow, un par objet.

{ "id": 1, "name": "Ada", "address": { "city": "Paris" } }
export type Root = {
  id: number,
  name: string,
  address: Address,
};

export type Address = {
  city: string,
};

Une liste à la racine est nommée elle aussi :

export type Users = UsersItem[];

Cet alias manquait : le type de l’élément sortait seul, et le nom racine que vous aviez réglé n’allait nulle part. Le défaut a été trouvé en écrivant cette page, puis corrigé.

L’exactitude ne nous appartient pas

La sortie écrit { … }, ni {| … |} ni un ... final. Avec exact_by_default=true, que les versions récentes de Flow activent, cet objet est exact : une propriété en trop est une erreur. Sans le drapeau, il est inexact et les propriétés en trop sont admises.

Les deux se défendent, et la différence est une décision de projet consignée dans votre .flowconfig. Écrire le signe dans un sens ou dans l’autre imposerait cette décision au nom d’un échantillon qui n’en dit rien : le type engendré suit donc simplement votre configuration.

mixed, pas any

Un tableau vide donne mixed[] ; une valeur de forme inconnue donne mixed. L’intérêt de mixed est que Flow vous force à le restreindre avant usage, ce que vous voulez précisément quand le type est réellement inconnu. any ferait plus net dans la sortie et désactiverait le vérificateur là où la donnée est la moins comprise.

Ce qu’un document ne peut pas dire

Rien n’est optionnel : name: string veut dire présent, parce que l’échantillon le contenait. Si le champ est parfois absent, la retouche est name?: string, et string | null s’il peut être nul — l’échantillon ne prouve que ce qu’il contient.

Un tableau hétérogène devient une union, (number | string)[], qui décrit l’échantillon avec précision et sera peut-être plus large ou plus étroite que vos données réelles. Et une clé qui n’est pas un identifiant valide garde ses guillemets : "content-type": string.

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.

Questions fréquentes

Les objets engendrés sont-ils exacts ou inexacts ?
Ni l’un ni l’autre n’est écrit : la sortie emploie `{ … }` tel quel, donc votre `.flowconfig` décide. Avec `exact_by_default=true` — le réglage livré par les versions récentes de Flow — ces objets sont exacts ; sans lui, inexacts. Écrire `{| |}` ou un `...` final imposerait un choix de projet dont l’échantillon ne sait rien.
Pourquoi `mixed` et pas `any` ?
Parce que `mixed` est honnête. Un tableau vide ne dit rien de ses éléments, et `mixed` dit exactement cela tout en vous obligeant à affiner avant usage. `any` dirait la même chose puis laisserait passer toutes les erreurs en silence : un type inconnu n’est pas une raison d’éteindre le vérificateur.
Faut-il encore démarrer un projet en Flow ?
C’est votre décision, et l’outil sert dans les deux cas. Flow est vivant et utilisé, surtout dans des bases antérieures à l’essor de TypeScript ou proches de l’écosystème Meta. Si vous choisissez aujourd’hui sans contrainte de ce genre, TypeScript a la plus grande bibliothèque de définitions — et ce site convertit aussi vers lui.

Convertisseurs associés