Naar de inhoud

GraphQL tot TypeScript-definities — Numio

Genereert TypeScript-typen op basis van een GraphQL-schema met @graphql-codegen/typescript, plus resultaat- en variabelentypen voor alle bewerkingen in het documentpaneel. Null-velden worden optionele Maybe<T>-eigenschappen; niet-nulllijsten worden Array<T>.

Het typen van de gegevens die door een query in een frontend worden geretourneerd zonder een codegen.yml- en CLI-run in te stellen.

GraphQL Schema

Document

TypeScript

Wanneer gebruik je dit?

  • Het typen van de gegevens die door een query in een frontend worden geretourneerd zonder een codegen.yml- en CLI-run in te stellen.
  • Controleren hoe een schemawijziging (een veld dat nul kan worden gemaakt, een nieuwe enumwaarde) eruit zal zien in de gegenereerde TypeScript voordat deze wordt vastgelegd.

Hoe werkt het

  1. Plak uw SDL (type, enum, interface, union, scalaire definities) in de GraphQL Schema-editor.
  2. Plaats query's, mutaties of fragmenten in de Documenteditor, of wis deze om alleen schematypen te krijgen; een document dat niet overeenkomt met het schema wordt overgeslagen met een waarschuwingsopmerking.
  3. Kopieer de gegenereerde typen: schematypen zoals Gebruiker, plus GetUserQuery en GetUserQueryVariables voor elke benoemde bewerking.

GraphQL-schema + document

# 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 }
}

TypeScript-typen

…
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
}

Details en beperkingen

De uitvoer begint met vaste helpertypen (Misschien, InputMaybe, Exact, MakeOptional, Scalars, …), hierboven afgekort tot '…'. Scalars wijst elke scalair toe aan afzonderlijke invoer- en uitvoertypen.

Aangepaste scalairen zoals Datum worden getypt als any; enum-waarden worden een TypeScript-enum met PascalCase-sleutels (USER wordt User = "USER").

Generatie draait in een Web Worker in uw browser; er wordt niets geüpload. Het resultaat is opgemaakt met Prettier zonder puntkomma's, en de pagina heeft geen codegen-configuratieopties.

FAQ

Waarom begint de uitvoer met "// Document genegeerd"?

De Documenteditor is gevalideerd op basis van uw schema en het standaardvoorbeeld vraagt velden zoals gebruikersnaam op. Wanneer de validatie mislukt, genereert de pagina nog steeds de schematypen en wordt de eerste fout in een opmerking bovenaan geplaatst. Corrigeer de bewerkingen of wis de Documenteditor.

Hoe worden null-velden getypt?

Een null-veld zoals naam: String wordt naam?: Misschien<Scalars["String"]["output"]>, waarbij Misschien<T> T | nul. Bij bewerkingsresultaattypen wordt het inline geschreven als naam?: string | nul.

Zijn alleen de geselecteerde velden opgenomen in het querytype?

Ja. GetUserQuery bevat alleen de velden die de query selecteert (id en naam hier), met __typename als optionele eigenschap, terwijl het volledige gebruikerstype afzonderlijk wordt gegenereerd.

Specificaties en referenties