Générer les signatures des résolveurs GraphQL — Numio
Génère les signatures de types des resolvers d'un schéma GraphQL : TypeScript (par défaut, typescript-resolvers), Flow (flow-resolvers) ou Java (java-resolvers). La sortie TypeScript comprend une table Resolvers avec un objet resolver typé par type du schéma.
Typer l'objet de resolvers passé à Apollo Server ou graphql-yoga pour que parent, args et les valeurs de retour soient vérifiés.
Quand l’utiliser
- Typer l'objet de resolvers passé à Apollo Server ou graphql-yoga pour que parent, args et les valeurs de retour soient vérifiés.
- Obtenir les interfaces DataFetcher de graphql-java pour chaque type avec l'option JAVA Resolvers Signature.
Mode d’emploi
- Collez le schéma dans l'éditeur GraphQL Schema.
- Choisissez TypeScript Resolvers Signature, Flow Resolvers Signature ou JAVA Resolvers Signature dans la liste de sortie.
- Copiez la sortie ; en TypeScript, annotez votre table de resolvers avec le type Resolvers généré.
Schéma GraphQL
type Query {
user(id: ID!): User
}
type User {
id: ID!
name: String
}Signatures de resolvers
import { GraphQLResolveInfo } from "graphql"
…
export type QueryResolvers<
ContextType = any,
ParentType extends
ResolversParentTypes["Query"] = ResolversParentTypes["Query"],
> = {
user?: Resolver<
Maybe<ResolversTypes["User"]>,
ParentType,
ContextType,
RequireFields<QueryUserArgs, "id">
>
}
export type UserResolvers<
ContextType = any,
ParentType extends
ResolversParentTypes["User"] = ResolversParentTypes["User"],
> = {
id?: Resolver<ResolversTypes["ID"], ParentType, ContextType>
name?: Resolver<Maybe<ResolversTypes["String"]>, ParentType, ContextType>
__isTypeOf?: IsTypeOfResolverFn<ParentType, ContextType>
}
…Détails et limites
Les types générés comme QueryResolvers ont ContextType = any ; les arguments obligatoires sont typés avec RequireFields, et les resolvers d'objet incluent un __isTypeOf facultatif.
Seul le schéma est utilisé. Les signatures de resolvers ne dépendent pas des opérations, la page n'a donc pas d'éditeur Documents.
L'option Java produit des public interfaces de méthodes DataFetcher dans public class Resolvers, dans le package com.example.graphql. Tout s'exécute dans un Web Worker du navigateur.
FAQ
Comment définir mon propre type de contexte ?
La page n'a pas d'options mappers ni contextType. Passez votre type de contexte en paramètre générique, par exemple Resolvers<MyContext>, puisque chaque type de resolver généré accepte ContextType.
Pourquoi tous les champs de resolver sont-ils facultatifs ?
typescript-resolvers marque par défaut chaque resolver de champ comme facultatif, car les serveurs GraphQL se rabattent sur des resolvers par défaut qui lisent la propriété de l'objet parent.
Comment l'option Java type-t-elle les champs ID ?
Les champs de type ID et les types objet sont renvoyés en DataFetcher<Object> ; les champs String deviennent DataFetcher<String>.