Convertir GraphQL en types Flow — Numio
Génère des définitions de types Flow à partir d'un schéma GraphQL et d'opérations avec @graphql-codegen/flow et flow-operations. Les types objet deviennent des objets Flow exacts ({| |}) et les champs nullable deviennent des types maybe facultatifs (?T).
Ajouter des résultats GraphQL typés à une base de code qui vérifie encore ses types avec Flow plutôt qu'avec TypeScript.
Quand l’utiliser
- Ajouter des résultats GraphQL typés à une base de code qui vérifie encore ses types avec Flow plutôt qu'avec TypeScript.
- Générer les types de variables et de résultat d'une seule query pour les coller à côté d'un composant.
Mode d’emploi
- Collez le SDL du schéma dans l'éditeur GraphQL Schema.
- Saisissez dans l'éditeur Document les opérations que vous utilisez, ou videz-le si vous n'avez besoin que des types du schéma.
- Copiez la sortie, qui commence par // @flow, dans un fichier .js sous Flow.
Schéma GraphQL + 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 }
}Types Flow
// @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?: * |}>,
},
|},
}Détails et limites
Les champs référencent les scalaires via $ElementType<Scalars, "ID"> ; le type Scalars en tête (omis ci-dessus) associe ID et String à string, Int et Float à number.
Les types de résultat des opérations sont construits avec des spreads d'objet et un helper local $Pick, de sorte que seuls les champs sélectionnés apparaissent.
La génération s'exécute dans un Web Worker de votre navigateur et le résultat est formaté avec Prettier ; la page ne propose aucune option de plugin.
FAQ
Les types objet générés sont-ils exacts ?
Oui. Les types objet du schéma utilisent la syntaxe d'objet exact {| ... |}, donc Flow rejette les propriétés supplémentaires.
Comment les champs nullable sont-ils représentés ?
Un champ nullable devient une propriété facultative de type maybe, par exemple name?: ?$ElementType<Scalars, "String">. Les champs non nuls sont obligatoires et ne sont pas maybe.
Pourquoi la sortie contient-elle un commentaire "Document ignored" ?
Les opérations de l'éditeur Document sont validées par rapport au schéma. Si elles ne correspondent pas (l'exemple par défaut interroge username), seuls les types du schéma sont générés et la première erreur apparaît en commentaire sous // @flow. Corrigez ou videz le document.