Objeto simples
- Entrada
- {"id":1,"name":"Ana","active":true}
- Saída esperada
- export interface Root { id: number; name: string; active: boolean; }
Texto, número e booleano.
converter json em interface typescript
Cole o JSON, deixe TypeScript marcado e copie a interface. Com mais de um exemplo, a ferramenta descobre quais campos são opcionais e quais aceitam null.
Texto, número e booleano.
O segundo item não tem email: vira email?. O array na raiz usa type.
Dois documentos: um com texto e outro com null.
Número em um documento e texto no outro: união.
user-name precisa de aspas, class não.
items gera a interface Item, no singular.
Um campo é opcional quando falta em pelo menos um dos objetos observados naquela posição, seja em documentos diferentes ou em itens diferentes de um mesmo array. Se todos os objetos de um array de 50 itens têm a chave phone, ela é obrigatória; se um não tem, vira phone?: string. Já um valor null não torna o campo opcional: ele o torna anulável (string | null). Os dois conceitos são distintos na API e nas linguagens, por isso a ferramenta os separa. A opção Todos os campos opcionais marca cada campo como opcional, útil para PATCH e para respostas parciais.
Para objetos de dados os dois funcionam. Interface permite extends e a fusão de declarações com o mesmo nome; type permite uniões e tuplas no mesmo formato. A ferramenta gera interface por padrão e troca para type em Opções. Uniões e arrays no tipo raiz sempre usam type, porque interface só descreve objetos.
Como string. O JSON não tem tipo de data, e JSON.parse não cria objetos Date. Datas em RFC 3339, como 2026-03-14T09:30:00Z, são reconhecidas e geram o formato date-time nos outros destinos, mas no TypeScript o campo continua string até que você converta com new Date(valor).
O modificador readonly impede reatribuir a propriedade depois que o objeto existe, e nos arrays gera readonly T[], que não tem push nem splice. É só verificação do compilador: nada muda em execução. Ative Imutável em Opções para gerar assim.
unknown é o tipo seguro para um valor desconhecido: o compilador exige uma verificação antes do uso. any desliga a checagem. A ferramenta usa unknown para null puro, arrays vazios e objetos vazios.
export type Root = RootItem[];
export interface RootItem {
id: number;
number: string;
status: string;
createdAt: string;
total: number;
customer: Customer;
items: Item[];
tags: string[];
shipping: Shipping;
billing?: Shipping;
couponCode?: string;
}
export interface Customer {
id: string;
name: string;
email: string;
phone: string | null;
}
export interface Item {
sku: string;
name: string;
qty: number;
price: number;
}
export interface Shipping {
street: string;
city: string;
zip: string;
}
Texto com poucos valores repetidos, em pelo menos 8 amostras, vira enum.
Data e hora, data, UUID, e-mail, URL e IPv4.
Objetos com os mesmos campos viram um tipo só.
Chaves que parecem ids ou datas viram mapa, e objeto vazio vira mapa de valores desconhecidos.
Array de tamanho fixo com tipos diferentes por posição, como ["a", 1].
Evita int quando as amostras só trazem inteiros por acaso.
Recusa vírgula sobrando, comentários, aspas simples e afins.
Da linguagem: camelCase, snake_case ou PascalCase, com anotação da chave original. Dataclass e TypedDict sempre mantêm as chaves.
Go, C#, Java, Swift e Pydantic. Nas outras linguagens o campo continua texto.
readonly em TypeScript, frozen em Python, init em classes C# e let em Swift.
O JSON é processado no seu navegador. Nada do que você cola ou abre é enviado a servidores.