Qué hace esta herramienta
Una muestra JSON pasa a ser alias de tipos de Flow, uno por objeto.
{ "id": 1, "name": "Ada", "address": { "city": "Paris" } }
export type Root = {
id: number,
name: string,
address: Address,
};
export type Address = {
city: string,
};
Una lista en la raíz también recibe nombre:
export type Users = UsersItem[];
Ese alias faltaba: el tipo del elemento salía solo, y el nombre raíz que habías puesto no iba a ninguna parte. Se encontró al escribir esta página y se corrigió.
La exactitud no nos toca a nosotros
La salida escribe { … }, ni {| … |} ni un ... final. Con exact_by_default=true, que las versiones recientes de Flow activan, ese objeto es exacto: una propiedad de más es un error. Sin la bandera es inexacto y las propiedades de más se admiten.
Ambas posturas se defienden, y la diferencia es una decisión de proyecto anotada en tu .flowconfig. Escribir el signo en un sentido u otro impondría esa decisión en nombre de una muestra que no dice nada al respecto: el tipo generado sigue simplemente tu configuración.
mixed, no any
Un array vacío da mixed[]; un valor de forma desconocida da mixed. La gracia de mixed es que Flow te obliga a estrecharlo antes de usarlo, que es lo que quieres cuando el tipo es de verdad desconocido. any quedaría más limpio en la salida y apagaría el verificador justo donde el dato se entiende menos.
Lo que un documento no puede decir
Nada es opcional: name: string significa presente, porque la muestra lo traía. Si el campo falta a veces, el retoque es name?: string, y string | null si puede ser nulo: la muestra solo prueba lo que contiene.
Un array heterogéneo pasa a unión, (number | string)[], que describe la muestra con precisión y quizá sea más ancha o más estrecha que tus datos reales. Y una clave que no es un identificador válido conserva sus comillas: "content-type": string.
Privado por diseño
Todo se ejecuta localmente en tu navegador con JavaScript. Tus datos nunca se suben a un servidor, lo que hace que la herramienta sea segura para contenido sensible y funcione sin conexión.