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.
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
- Plak het schema SDL in de GraphQL Schema-editor.
- Voer de bewerkingen in die u gebruikt in de Documenteditor, of wis deze als u alleen schematypen nodig heeft.
- 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.