GraphQL in Flow-Typen umwandeln — Numio
Erzeugt Flow-Typdefinitionen aus einem GraphQL-Schema und Operationen mit @graphql-codegen/flow und flow-operations. Objekttypen werden zu exakten Flow-Objekten ({| |}), nullable Felder zu optionalen Maybe-Typen (?T).
Typisierte GraphQL-Ergebnisse in eine Codebasis einbauen, die noch mit Flow statt TypeScript typgeprüft wird.
Wann sie hilft
- Typisierte GraphQL-Ergebnisse in eine Codebasis einbauen, die noch mit Flow statt TypeScript typgeprüft wird.
- Variablen- und Ergebnistypen für eine einzelne Query erzeugen, um sie neben eine Komponente einzufügen.
Anwendung
- Füge die Schema-SDL in den Editor GraphQL Schema ein.
- Gib die verwendeten Operationen im Editor Document ein oder leere ihn, wenn du nur Schematypen brauchst.
- Kopiere die Ausgabe, die mit // @flow beginnt, in eine .js-Datei unter 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 und Einschränkungen
Felder verweisen über $ElementType<Scalars, "ID"> auf Skalare; der Typ Scalars am Anfang (oben ausgelassen) bildet ID und String auf string sowie Int und Float auf number ab.
Ergebnistypen von Operationen werden aus Object-Spreads und einem lokalen $Pick-Helfer aufgebaut, sodass nur die ausgewählten Felder erscheinen.
Die Erzeugung läuft in einem Web Worker im Browser, das Ergebnis wird mit Prettier formatiert; die Seite hat keine Plugin-Optionen.
FAQ
Sind die erzeugten Objekttypen exakt?
Ja. Objekttypen des Schemas nutzen die exakte Objektsyntax {| ... |}, sodass Flow zusätzliche Eigenschaften ablehnt.
Wie werden nullable Felder dargestellt?
Ein nullable Feld wird zu einer optionalen Eigenschaft mit Maybe-Typ, zum Beispiel name?: ?$ElementType<Scalars, "String">. Non-Null-Felder sind erforderlich und kein Maybe-Typ.
Warum enthält die Ausgabe einen Kommentar "Document ignored"?
Operationen im Editor Document werden gegen das Schema validiert. Passen sie nicht (das Standardbeispiel fragt username ab), werden nur Schematypen erzeugt und der erste Fehler erscheint als Kommentar unter // @flow. Passe das Document an oder leere es.