Ir para o conteúdo
Totalmente local

Schema GraphQL para tipos TypeScript

Converta um esquema GraphQL em tipos, interfaces e enums TypeScript correspondentes.

Entrada
Saída

Schema GraphQL para tipos TypeScript

Cole um documento GraphQL SDL (schema definition language) — as declarações de tipo, entrada, interface e enum que descrevem uma API GraphQL — e esta ferramenta gera os tipos TypeScript correspondentes. Equipas de backend que constroem um servidor GraphQL, ou equipas de frontend que o consomem sem ferramentas de codegen instaladas, obtêm formas tipadas para cada objeto, entrada e interface no esquema numa única passagem, sem necessidade de criar um passo de build apenas para ver como os tipos ficam.

O mapeamento de escalares segue a especificação GraphQL por padrão: ID e String tornam-se string, Int e Float tornam-se number, Boolean mantém-se boolean, e qualquer scalar customizado — DateTime, JSON, Upload — recua para um tipo configurável que escolhe. Os campos anuláveis podem ser renderizados como uma propriedade opcional (field?: Type) ou como uma união explícita com null (field: Type | null), e a mesma escolha de forma aplica-se a declarações inteiras: escolha alias de tipo TypeScript ou interfaces, com implements tornando-se extends quando interfaces são selecionadas. Enums geram uma união de string-literal ou um enum TypeScript real. Um prefixo ou sufixo de nome evita colisões de nomes gerados com os escritos manualmente, comentários e blocos de "description" do esquema transitem como JSDoc, e tipos cujo nome começa com underscore — os próprios tipos de introspection do GraphQL — são omitidos por padrão.

Os argumentos de campo e as diretivas são eliminadas automaticamente, uma vez que os tipos TypeScript descrevem forma em vez de resolvers: "field(id: ID!): User @deprecated" torna-se um campo simples. Os tipos de lista aninhados como [String!]! mantêm a sua nulabilidade interna e externa independente, portanto uma lista não-nula de strings anuláveis e uma lista anulável de strings não-nulas ficam diferentes. As declarações também podem ser ordenadas alfabeticamente em vez de seguir a ordem original do esquema.

Tudo funciona localmente no seu navegador — o esquema que cola nunca é enviado para lado algum. Copie os tipos gerados, transfira-os como ficheiro .txt, ou envie a saída diretamente de volta para a entrada para continuar a refinar o esquema.

FAQ

Trata modificadores de listas aninhadas e não-nulas como [String!]!?
Sim. Cada nível de nulabilidade — a lista em si e seus elementos — é mapeado independentemente, portanto [String!]! torna-se string[] enquanto [String] torna-se (string | null)[].
O que acontece aos scalares customizados como DateTime ou JSON?
Mapeiam para o tipo fallback definido na opção "Custom scalar type" (unknown por padrão). Defina-o para string, Date ou qualquer outro tipo correspondente e cada campo usando esse scalar o escolhe.
Os argumentos de campo e as diretivas são mantidos na saída?
Não. Os tipos TypeScript descrevem apenas forma, portanto argumentos como (limit: Int) e diretivas como @deprecated são descartados; o campo em si continua a converter normalmente.
Posso gerar interfaces em vez de alias de tipos?
Sim. Mude "Declaration kind" para Interfaces, e qualquer cláusula implements num tipo GraphQL torna-se uma cláusula extends na interface TypeScript.
O meu esquema é enviado para algum lugar?
Não. A conversão funciona inteiramente no seu navegador — o seu esquema GraphQL nunca sai do seu dispositivo.