Ir para o conteúdo
Totalmente local

Tipo TypeScript para JSON Schema

Converta uma interface ou alias de tipo TypeScript em JSON Schema.

Entrada
Saída

Tipo TypeScript para JSON Schema

Cole uma interface TypeScript ou alias de tipo e esta ferramenta gera o JSON Schema equivalente, pronto para validar payloads de API, ficheiros de configuração ou quaisquer outros dados JSON que devam corresponder às suas definições de tipo. É construída para programadores que já descrevem as suas formas de dados em TypeScript e desejam um esquema sem ter de escrever um do zero ou configurar um passo de construção.

Escolha entre JSON Schema draft-07 e o dialeto mais recente 2020-12, uma vez que validadores e ferramentas ainda diferem sobre qual esperam. Uniões com literais de string como 'active' | 'inactive' podem ser apresentadas como um enum ou como anyOf de valores const, e pode exigir que objetos rejeitem propriedades desconhecidas, transforme comentários de documentação em campos de descrição, ou extraia interfaces nomeadas em um bloco $defs (ou definitions) referenciado por $ref em vez de inline em toda parte onde são usadas.

Arrays, tuples, tipos Record e Map, e uniões que incluem null são processadas da forma como TypeScript realmente as utiliza — um campo anulável torna-se um array de tipo ou uma ramificação anyOf em vez de ser silenciosamente descartado. Construções sem equivalente em JSON Schema, como métodos, tipos de função ou parâmetros genéricos não resolvidos, são convertidas o mais permissivamente possível e listadas como avisos sob o resultado para que nada falhe silenciosamente.

Tudo é executado localmente no seu navegador; as suas definições de tipo e o esquema gerado nunca são carregados em qualquer lugar. Copie o resultado, descarregue-o como um ficheiro .txt, ou envie-o diretamente para a entrada de outra ferramenta para continuar a trabalhar nele.

FAQ

Que partes do TypeScript consegue converter?
Interfaces, aliases de tipo, literais de objeto aninhados, arrays, tuples, Record/Map/Set, Date, Partial/Required/Pick/Omit, e uniões incluindo uniões de literais de string e null. Construções sem equivalente em JSON Schema, como métodos e tipos de função, são ignoradas e listadas como avisos.
Qual é a diferença entre draft-07 e 2020-12?
Ambos são dialetos JSON Schema. 2020-12 é o mais recente e usa $defs e prefixItems para tuples, enquanto draft-07 usa definitions e um array de items. Escolha o que o seu validador espera.
O que acontece às propriedades marcadas com '?'?
Ficam fora do array required do esquema, assim o esquema gerado corresponde à própria ideia do TypeScript sobre quais campos são opcionais.
Por que alguns campos acabam como um esquema vazio {}?
Isso acontece para construções que JSON Schema não consegue expressar, como um parâmetro de tipo genérico ou um tipo que a ferramenta não conseguiu resolver. Um aviso é adicionado abaixo do resultado explicando exatamente qual campo e porquê.
O meu código TypeScript é carregado em qualquer lugar?
Não. A conversão é executada inteiramente no seu navegador — as suas definições de tipo e o esquema gerado nunca deixam o seu dispositivo.