Naar de inhoud

GraphQL naar Flow-typen omzetten — Numio

Genereert definities van het stroomtype op basis van een GraphQL-schema en bewerkingen met behulp van @graphql-codegen/flow en flow-operations. Objecttypen worden exacte Flow-objecten ({| |}) en null-velden worden optionele misschien-typen (?T).

Getypte GraphQL-resultaten worden toegevoegd aan een codebase die nog steeds typecontroles uitvoert met Flow in plaats van TypeScript.

GraphQL Schema

Document

Flow

Wanneer gebruik je dit?

  • Getypte GraphQL-resultaten worden toegevoegd aan een codebase die nog steeds typecontroles uitvoert met Flow in plaats van TypeScript.
  • Variabelen en resultaattypen genereren voor een enkele query om naast een component te plakken.

Hoe werkt het

  1. Plak het schema SDL in de GraphQL Schema-editor.
  2. Voer de bewerkingen in die u gebruikt in de Documenteditor, of wis deze als u alleen schematypen nodig heeft.
  3. Kopieer de uitvoer, die begint met // @flow, naar een .js-bestand onder Flow.

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

Flow-typen

// @flow
…
export type User = {|
  __typename?: "User",
  id: $ElementType<Scalars, "ID">,
  name?: ?$ElementType<Scalars, "String">,
  tags: Array<$ElementType<Scalars, "String">>,
|}

export type GetUserQueryVariables = {
  id: $ElementType<Scalars, "ID">,
}

export type GetUserQuery = {
  ...{ __typename?: "Query" },
  ...{|
    user?: ?{
      ...{ __typename?: "User" },
      ...$Pick<User, {| id: *, name?: * |}>,
    },
  |},
}

Details en beperkingen

Velden verwijzen naar scalairen tot en met $ElementType<Scalars, "ID">; het Scalars-type bovenaan (hierboven weggelaten) wijst ID en String toe aan string, Int en Float aan nummer.

Resultaattypen voor bewerkingen zijn opgebouwd uit objectspreads en een lokale $Pick-helper, zodat alleen de geselecteerde velden verschijnen.

Het genereren wordt uitgevoerd in een Web Worker in uw browser en het resultaat wordt opgemaakt met Prettier; er zijn geen plug-in-opties op de pagina.

FAQ

Zijn de gegenereerde objecttypen exact?

Ja. Schema-objecttypen gebruiken exacte objectsyntaxis {| ... |}, dus extra eigenschappen worden door Flow afgewezen.

Hoe worden null-velden weergegeven?

Een nulveld wordt een optionele eigenschap met een misschien-type, bijvoorbeeld naam?: ?$ElementType<Scalars, "String">. Niet-null-velden zijn verplicht en niet-misschien.

Waarom bevat de uitvoer de opmerking 'Document genegeerd'?

Bewerkingen in de Documenteditor worden gevalideerd op basis van het schema. Als ze niet overeenkomen (de standaard gebruikersnaam van een voorbeeldquery), worden alleen schematypen gegenereerd en verschijnt de eerste fout als commentaar hieronder // @flow. Pas het document aan of wis het.

Specificaties en referenties