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.