Da GraphQL a TypeScript Definizioni — Numio
Genera tipi TypeScript da uno schema GraphQL con @graphql-codegen/typescript, oltre a tipi di risultati e variabili per qualsiasi operazione nel pannello Documento. I campi nullable diventano proprietà Maybe<T> opzionali; gli elenchi non nulli diventano Array<T>.
Digitare i dati restituiti da una query in un frontend senza impostare un'esecuzione codegen.yml e CLI.
Quando usarlo
- Digitare i dati restituiti da una query in un frontend senza impostare un'esecuzione codegen.yml e CLI.
- Controllare come apparirà una modifica allo schema (un campo che diventa nullable, un nuovo valore enum) nel TypeScript generato prima di eseguirne il commit.
Come si usa
- Incolla il tuo SDL (definizioni type, enum, interface, union e scalar) nell’editor dello schema GraphQL.
- Inserisci query, mutazioni o frammenti nell'editor dei documenti o cancellalo per ottenere solo i tipi di schema; un documento che non corrisponde allo schema viene ignorato con un commento di avviso.
- Copia i tipi generati: tipi di schema come Utente, oltre a GetUserQuery e GetUserQueryVariables per ogni operazione denominata.
Schema GraphQL + documento
# GraphQL Schema editor
type Query {
user(id: ID!): User
}
type User {
id: ID!
name: String
tags: [String!]!
}
# Document editor
query GetUser($id: ID!) {
user(id: $id) { id name }
}Tipi TypeScript
…
export type Query = {
__typename?: "Query"
user?: Maybe<User>
}
export type QueryUserArgs = {
id: Scalars["ID"]["input"]
}
export type User = {
__typename?: "User"
id: Scalars["ID"]["output"]
name?: Maybe<Scalars["String"]["output"]>
tags: Array<Scalars["String"]["output"]>
}
export type GetUserQueryVariables = Exact<{
id: Scalars["ID"]["input"]
}>
export type GetUserQuery = {
__typename?: "Query"
user?: { __typename?: "User"; id: string; name?: string | null } | null
}Dettagli e limiti
L'output inizia con tipi di helper fissi (Forse, InputMaybe, Esatto, MakeOptional, Scalari, ...), abbreviati in "..." sopra. Gli scalari mappano ogni scalare per separare i tipi di input e output.
Gli scalari personalizzati come Data vengono digitati any; i valori enum diventano un'enumerazione TypeScript con le chiavi PascalCase (USER diventa Utente = "USER").
La generazione viene eseguita in un Web Worker nel tuo browser; non viene caricato nulla. Il risultato è formattato con Prettier senza punto e virgola e la pagina non ha opzioni di configurazione del codegen.
FAQ
Perché l’output inizia con "// Document ignored"?
Il contenuto dell’editor Document viene convalidato rispetto allo schema e il suo esempio predefinito interroga campi come username. Se la convalida fallisce, la pagina genera comunque i tipi dello schema e inserisce il primo errore in un commento iniziale. Correggi le operazioni oppure svuota l’editor Document.
Quali tipi vengono assegnati ai campi nullable?
Un campo nullable come name: String diventa name?: Maybe<Scalars["String"]["output"]>, dove Maybe<T> è T | null. Nei tipi dei risultati delle operazioni viene scritto inline come name?: string | null.
Solo i campi selezionati sono inclusi nel tipo di query?
Sì. GetUserQuery contiene solo i campi selezionati dalla query (qui id e name), con __typename come proprietà facoltativa, mentre il tipo User completo viene generato separatamente.