Vai al contenuto
100% locale

Schema GraphQL a tipi TypeScript

Converti uno schema GraphQL in tipi, interfacce ed enum TypeScript corrispondenti.

Ingresso
Uscita

Schema GraphQL a tipi TypeScript

Incolla un documento del linguaggio di definizione dello schema GraphQL (SDL) — le dichiarazioni di tipi, input, interfacce ed enum che descrivono un'API GraphQL — e questo strumento genera i tipi TypeScript corrispondenti. I team backend che costruiscono un server GraphQL, o i team frontend che lo consumano senza strumenti di generazione di codice installati, ottengono forme tipate per ogni oggetto, input e interfaccia nello schema in un'unica passata, senza la necessità di configurare un passo di compilazione solo per vedere come appaiono i tipi.

La mappatura degli scalari segue la specifica GraphQL per impostazione predefinita: ID e String diventano string, Int e Float diventano number, Boolean rimane boolean, e qualsiasi scalare personalizzato — DateTime, JSON, Upload — ricade su un tipo configurabile che scegli. I campi nullable possono essere rappresentati come una proprietà opzionale (field?: Type) o come un'unione esplicita con null (field: Type | null), e la stessa scelta di forma si applica alle dichiarazioni complete: scegli gli alias di tipo TypeScript o le interfacce, con implements che diventa extends quando le interfacce sono selezionate. Gli enum generano o un'unione di letterali di stringa o un vero enum TypeScript. Un prefisso o suffisso di nome mantiene i nomi generati lontani da collisioni con quelli scritti a mano, i commenti e i blocchi "description" dello schema vengono conservati come JSDoc, e i tipi il cui nome inizia con un trattino basso — i propri tipi di introspezione di GraphQL — vengono saltati per impostazione predefinita.

Gli argomenti di campo e le direttive vengono eliminati automaticamente, poiché i tipi TypeScript descrivono la forma piuttosto che i risolutori: "field(id: ID!): User @deprecated" diventa un campo semplice. I tipi di liste annidate come [String!]! mantengono la loro nullabilità interna e esterna indipendente, quindi un elenco non-nullable di stringhe nullable e un elenco nullable di stringhe non-nullable escono diversamente. Le dichiarazioni possono anche essere ordinate alfabeticamente invece di seguire l'ordine originale dello schema.

Tutto funziona localmente nel tuo browser — lo schema che incolli non viene mai caricato da nessuna parte. Copia i tipi generati, scaricali come file .txt, o rimanda l'output direttamente all'input per continuare a perfezionare lo schema.

FAQ

Gestisce i modificatori di lista annidata e non-nullable come [String!]!?
Sì. Ogni livello di nullabilità — l'elenco stesso e i suoi elementi — viene mappato indipendentemente, quindi [String!]! diventa string[] mentre [String] diventa (string | null)[].
Cosa succede con scalari personalizzati come DateTime o JSON?
Vengono mappati al tipo di fallback impostato nell'opzione "Tipo scalare personalizzato" (unknown per impostazione predefinita). Impostalo su string, Date o qualsiasi altro tipo corrispondente e ogni campo che utilizza quel scalare lo raccoglie.
Gli argomenti di campo e le direttive vengono conservati nell'output?
No. I tipi TypeScript descrivono solo la forma, quindi gli argomenti come (limit: Int) e le direttive come @deprecated vengono eliminati; il campo stesso viene ancora convertito normalmente.
Posso generare interfacce invece di alias di tipo?
Sì. Passa "Tipo di dichiarazione" a Interfacce, e qualsiasi clausola implements su un tipo GraphQL diventa una clausola extends sull'interfaccia TypeScript.
Il mio schema viene caricato da qualche parte?
No. La conversione viene eseguita interamente nel tuo browser — il tuo schema GraphQL non lascia mai il tuo dispositivo.