ForHosting KIT · Ferramentas para dev

Gere uma interface TypeScript a partir de JSON

Cole um objeto de amostra e receba uma interface TypeScript pronta: no exemplo, id vira number, tags vira string[] e a chave display-name fica entre aspas, tudo com o nome UserRecord. Grátis no seu navegador.

  • Grátis
  • Funciona no seu navegador
  • Sem cadastro
  • Seus dados não saem do seu aparelho
Use pelo WebAPIE-mailTelegramApp em breve

A ferramenta analisa a amostra, confirma que a raiz é um objeto e produz uma interface determinística para strings, números, booleanos, valores nulos, arrays e objetos aninhados.

Como cada tipo é deduzido

O gerador olha cada valor da sua amostra, não o nome das chaves. Um texto vira string, qualquer número vira number, verdadeiro ou falso ganha seu próprio tipo de sim ou não, e um valor vazio vira null. Objetos dentro de objetos se tornam tipos aninhados, e as listas são avaliadas por todos os elementos, não só pelo primeiro: uma lista só de textos dá string[], e uma misturada, uma união como (string | number | null)[]. Chaves que não podem ser escritas diretamente, como display-name, ficam entre aspas, e as propriedades mantêm a ordem da amostra original.

Erros comuns e como evitá-los

Uma única amostra não prova que um dado seja opcional, então todas as propriedades são marcadas como obrigatórias; ajuste à mão onde seus dados reais possam deixar algo de fora. Uma lista vazia não traz pistas e vira unknown[], e um objeto vazio vira Record<string, never>, por isso vale escolher uma amostra com listas e objetos preenchidos. O texto precisa ser de dados estritos, não JavaScript: os nomes vão entre aspas duplas, comentários e vírgulas no final não são aceitos e o nível superior deve ser um objeto. Datas, valores fixos e enumerações nunca são inventados.

Comece com uma amostra parecida com os dados reais

Objetos aninhados são representados por tipos de objeto dentro da interface raiz. Toda propriedade encontrada na amostra é emitida como obrigatória, pois um único exemplo não comprova que um campo seja opcional. Para obter um resultado útil, escolha uma amostra que contenha os campos e as variantes que sua aplicação realmente recebe.

Você também pode informar um nome raiz, como <code>UserResponse</code>; ele precisa ser um identificador TypeScript válido e não reservado. Se for omitido, o padrão estável será <code>RootObject</code>. Escalares, null ou arrays na raiz são rejeitados.

Entenda arrays, valores nulos e estruturas aninhadas

A inferência de arrays considera todos os elementos da amostra, e não apenas o primeiro. Uma lista formada somente por strings vira <code>string[]</code>, enquanto uma lista mista produz uma união estável, como <code>(string | number | null)[]</code>. Um array vazio não oferece evidência sobre o tipo dos elementos e, portanto, vira <code>unknown[]</code> em vez de receber um palpite enganoso.

Objetos dentro de arrays são expressos como tipos de objeto inline, e arrays aninhados são tratados recursivamente. Objetos vazios viram <code>Record&lt;string, never&gt;</code>, registrando que nenhum campo conhecido apareceu na amostra. Chaves que não podem ser identificadores comuns do TypeScript, inclusive aquelas com espaços, pontuação ou palavras reservadas, são emitidas como propriedades de string entre aspas.

O gerador não inventa marcadores opcionais, datas, literais, enums nem nomes de classe específicos do domínio.

Quais entradas são aceitas?

Arrays, escalares e null na raiz são rejeitados.

Como arrays vazios são tipados?

Eles viram unknown[] porque uma amostra vazia não oferece evidência sobre o tipo dos elementos.

As propriedades são marcadas como opcionais?

Não. As propriedades presentes são obrigatórias. Consulte várias cargas ou um esquema oficial para identificar campos opcionais.

Que tipo de texto posso colar?

Texto de dados estrito cujo nível superior seja um objeto. Os nomes precisam de aspas duplas, e comentários ou vírgulas no final não são permitidos. Um valor isolado, um null ou uma lista no nível superior são recusados, porque o resultado descreve um objeto.

Posso escolher o nome da interface?

Sim. Informe um nome como UserRecord; ele precisa ser um nome válido de TypeScript que não seja palavra reservada. Se deixar em branco, a interface se chama RootObject, e as repetições geram sempre o mesmo texto.

Que tipo recebe uma lista com valores misturados?

Todos os elementos são verificados, não só o primeiro. Uma lista só de textos vira string[], enquanto uma mistura gera uma união estável como (string | number | null)[], então o resultado mostra exatamente o que a amostra contém.

Tudo nesta página está disponível via API. Esta seção é para equipes que querem integrar a ferramenta aos próprios sistemas; quem não precisa disso pode simplesmente usar a ferramenta acima.

POSThttps://api.kit.forhosting.com/dev2/json-to-typescript-interface

Autenticação por token Bearer. Um único POST coloca a tarefa na fila; o resultado chega por webhook ou link assinado.

curl -X POST https://api.kit.forhosting.com/dev2/json-to-typescript-interface \
  -H "Authorization: Bearer $KIT_KEY" \
  -H "Content-Type: application/json" \
  -d '{"json":"{\"id\":42,\"name\":\"Ada\",\"active\":true,\"tags\":[\"admin\",\"editor\"],\"profile\":{\"email\":\"ada@example.com\",\"score\":9.5}}"}'
{
  "json": "{\"id\":42,\"name\":\"Ada\",\"active\":true,\"tags\":[\"admin\",\"editor\"],\"profile\":{\"email\":\"ada@example.com\",\"score\":9.5}}"
}
{
  "task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
  "type": "dev2.json_to_typescript_interface",
  "status": "queued",
  "_links": {
    "result": "/tasks/tsk_…/result"
  }
}

A API é assíncrona: cada chamada devolve um task_id na hora. Se preferir polling, consulte o status a até 1 requisição por segundo.

por chamadaUS$ 0,002

Preço publicado, sem tokens nem créditos escondidos. Tarefa que falha não é cobrada.

max_chars1000000
max_depth64
HTTPCódigoO que significa
401unauthorizedToken ausente ou inválido. Confira o header Authorization.
402insufficient_balanceSaldo insuficiente para esta tarefa. Faça uma recarga e tente de novo.
404unknown_typeEsse tipo de tarefa não existe. Confira o campo type no catálogo.
429rate_limitedMuitas requisições em pouco tempo. Espere um instante e tente de novo.

Transforme um objeto JSON representativo em uma interface TypeScript sem instalar um gerador nem rastrear manualmente cada valor aninhado. Ela também protege chaves JSON incomuns com aspas e permite escolher o nome da interface raiz.

Comece com um objeto JSON representativo

Cole um JSON válido cujo valor raiz seja um objeto, como uma resposta de API, um registro de configuração, uma carga de webhook ou um documento armazenado. O gerador examina os valores em vez dos nomes dos campos: uma string vira <code>string</code>, qualquer número JSON vira <code>number</code>, um booleano vira <code>boolean</code> e um valor nulo vira <code>null</code>. A entrada deve ser texto JSON, e não sintaxe de objeto JavaScript: nomes de propriedades exigem aspas duplas, comentários não são aceitos e vírgulas finais são inválidas.

Entenda arrays, valores nulos e estruturas aninhadas

Assim, a saída representa com fidelidade as evidências do JSON fornecido. A ordem das propriedades acompanha o JSON original, enquanto os membros das uniões seguem uma ordem determinística.

Revise a interface gerada antes do uso em produção

Compare-a com várias cargas ou com a documentação do provedor antes de decidir se propriedades devem ser opcionais, anuláveis, mais restritas ou compartilhadas por interfaces nomeadas. Se uma amostra contiver null e outra trouxer uma string, incorpore esse conhecimento ao tipo mantido. A saída determinística ajuda na revisão: a mesma entrada e o mesmo nome sempre geram o mesmo texto, sem rede, modelos, aleatoriedade ou data atual. Considere a definição gerada uma descrição precisa da amostra fornecida e um ótimo primeiro rascunho para o código real, não uma prova do contrato de uma API externa. Um timestamp continua sendo string porque JSON não possui tipo de data, e um inteiro continua sendo <code>number</code> porque TypeScript não distingue inteiros JSON em tempo de execução. JSON inválido, texto ausente, nomes inválidos, aninhamento excessivo e raízes que não sejam objetos retornam <code>invalid_input</code>. A execução via API começa em US$ 0,002 por solicitação, e o navegador aplica localmente a mesma lógica pura.

Tipar uma resposta de API desconhecida

Crie uma primeira interface prática a partir de uma resposta capturada e depois refine os campos opcionais conforme a documentação.

Documentar cargas de webhook

Converta um evento representativo em TypeScript legível que o serviço receptor e seus testes possam compartilhar.

Iniciar fixtures e integrações

Gere tipos aninhados estáveis para configurações, registros importados ou dados de teste sem rastrear cada propriedade à mão.

A ferramenta reconhece datas ou enums?

Não. Strings JSON continuam como string, e semântica de domínio ou restrições enum não são inferidas de uma única amostra.

Quanto custa uma solicitação de API?

Uma solicitação de API começa em US$ 0,002. O executor do navegador usa a mesma lógica determinística.

Ver a documentação completa do KIT →