100 % local — seus dados nunca saem do seu navegador

JSON para Flow — alias de tipos para o projeto

Transforme uma amostra JSON em alias de tipos Flow. Os objetos aninhados ganham nome próprio: um payload vira tipos que você importa onde precisar.

Instantâneo Privado Zero cookies

Entrada JSON

Saída Flow

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.

Perguntas frequentes

Os objetos gerados são exatos ou inexatos?
Nem um nem outro está escrito: a saída usa `{ … }` puro, então quem decide é o seu `.flowconfig`. Com `exact_by_default=true` — o ajuste que as versões recentes do Flow trazem — esses objetos são exatos; sem ele, inexatos. Escrever `{| |}` ou um `...` final imporia uma escolha de projeto que a amostra desconhece.
Por que `mixed` e não `any`?
Porque `mixed` é o honesto. Um array vazio não diz nada sobre seus itens, e `mixed` diz exatamente isso, obrigando você a refinar antes de usar. `any` diria o mesmo e depois deixaria passar todo erro em silêncio: um tipo desconhecido não é motivo para desligar o verificador.
Ainda vale começar um projeto em Flow?
A decisão é sua, e a ferramenta serve nos dois casos. O Flow está vivo e em uso, sobretudo em bases anteriores à ascensão do TypeScript ou próximas do ecossistema da Meta. Se você escolhe hoje sem essa amarra, o TypeScript tem a maior biblioteca de definições — e este site também converte para ele.

Conversores relacionados