Artigo do guia · 6 min de leitura
Gere TypeScript tipos de JSON que dizem a verdade
A etapa JSON a TypeScript geralmente começa copiando uma resposta API em um editor e escrevendo à mão uma interface – uma pequena tarefa que esconde um grande risco: os tipos que você escreve descrevem a resposta que você viu, não as respostas que seus usuários irão acionar.
Atualizado
JSON a TypeScript: comece com uma carga útil representativa, não com sorte
Um gerador só pode inferir o que sua amostra mostra. Busque uma resposta que inclua os casos estranhos: um registro com o campo opcional presente e outro sem, um nulo, um array vazio, um decimal. Uma boa amostra supera cinco limpas.
Campos opcionais vêm de arrays
Dado um único objeto, cada chave parece necessária. Dado um array de objetos, um gerador pode comparar itens: uma chave ausente em alguns itens é opcional (chave?: string), e uma chave presente em todos os lugares é necessária. É por isso que colar uma lista de registros produz tipos dramaticamente melhores do que colar um registro.
Modelo nulo honestamente
// One sample with "deleted_at": null and one with a date
interface User {
id: number;
deleted_at: string | null; // not string, not optional
}
nulo e indefinido são coisas diferentes. Um campo anulável está presente com um valor nulo; um campo opcional pode estar totalmente ausente. Geradores que colapsam os dois produzem interfaces que verificam o tipo enquanto estão errados - o tipo de erro mais caro, porque o compilador para de avisar você.
Os sindicatos vencem qualquer
Quando um campo é uma string em um registro e um número em outro – existem APIs confusas – o tipo honesto é string | número. Retornar para qualquer ou desconhecido silencia o compilador e envia a falha para a produção. Um gerador que reporta o sindicato pelo menos documenta a realidade, e você pode então perguntar à equipe API por quê.
Os tipos são em tempo de compilação; validar em tempo de execução
- TypeScript desaparece em tempo de execução. Nada impede que uma carga malformada chegue com uma forma que sua interface proíbe.
- Use tipos gerados para descrever o que você espera e um validador de tempo de execução (Zod, Valibot ou um esquema JSON com AJV) no limite onde os dados entram em seu aplicativo.
- Gerar um esquema JSON a partir da mesma amostra fornece metade do tempo de execução — o esquema é validado, o documento de interfaces.
Mantenha os tipos regenerados, não redigitados
Tipos escritos à mão derivam de API. Trate o gerador como uma etapa em seu fluxo de trabalho: cole uma nova resposta, gere novamente, cole em seu arquivo de tipos e deixe o compilador mostrar todos os lugares em que o API foi alterado. É o detector de desvio API mais barato que existe – e custa trinta segundos.
Experimente com o gerador JSON a TypeScript — interface ou saída de tipo, chaves opcionais detectadas, uniões preservadas.