O que esta ferramenta faz
Uma amostra JSON vira aliases de tipo Flow, um por objeto.
{ "id": 1, "name": "Ada", "address": { "city": "Paris" } }
export type Root = {
id: number,
name: string,
address: Address,
};
export type Address = {
city: string,
};
Uma lista na raiz também ganha nome:
export type Users = UsersItem[];
Esse alias faltava: o tipo do elemento saía sozinho, e o nome de raiz que você tinha definido não ia a lugar nenhum. Foi encontrado ao escrever esta página e corrigido.
A exatidão não nos cabe
A saída escreve { … }, nem {| … |} nem um ... final. Com exact_by_default=true, que as versões recentes do Flow ativam, esse objeto é exato: uma propriedade a mais é erro. Sem a flag ele é inexato e as propriedades a mais são admitidas.
As duas posturas se defendem, e a diferença é uma decisão de projeto registrada no seu .flowconfig. Escrever o sinal num sentido ou noutro imporia essa decisão em nome de uma amostra que nada diz a respeito: o tipo gerado apenas segue a sua configuração.
mixed, não any
Um array vazio dá mixed[]; um valor de forma desconhecida dá mixed. A graça do mixed é que o Flow obriga você a estreitá-lo antes do uso, que é o que se quer quando o tipo é de fato desconhecido. any ficaria mais limpo na saída e desligaria o verificador justamente onde o dado é menos compreendido.
O que um documento não consegue dizer
Nada é opcional: name: string quer dizer presente, porque a amostra o trazia. Se o campo às vezes falta, o retoque é name?: string, e string | null se ele puder ser nulo — a amostra só prova o que contém.
Um array heterogêneo vira união, (number | string)[], que descreve a amostra com precisão e talvez seja mais larga ou mais estreita que seus dados reais. E uma chave que não é um identificador válido mantém suas aspas: "content-type": string.
Privado por padrão
Tudo é executado localmente no seu navegador com JavaScript. Os seus dados nunca são enviados para um servidor, o que torna a ferramenta segura para conteúdo sensível e funciona offline.