Signaturen für GraphQL-Resolver generieren — Numio
Erzeugt Typsignaturen für Resolver eines GraphQL-Schemas: TypeScript (Standard, typescript-resolvers), Flow (flow-resolvers) oder Java (java-resolvers). Die TypeScript-Ausgabe enthält eine Resolvers-Map mit einem typisierten Resolver-Objekt pro Schematyp.
Das an Apollo Server oder graphql-yoga übergebene Resolver-Objekt typisieren, sodass parent, args und Rückgabewerte geprüft werden.
Wann sie hilft
- Das an Apollo Server oder graphql-yoga übergebene Resolver-Objekt typisieren, sodass parent, args und Rückgabewerte geprüft werden.
- Mit der Option JAVA Resolvers Signature graphql-java-DataFetcher-Interfaces für jeden Typ erhalten.
Anwendung
- Füge das Schema in den Editor GraphQL Schema ein.
- Wähle im Ausgabe-Dropdown TypeScript Resolvers Signature, Flow Resolvers Signature oder JAVA Resolvers Signature.
- Kopiere die Ausgabe; bei TypeScript annotierst du deine Resolver-Map mit dem erzeugten Typ Resolvers.
GraphQL-Schema
type Query {
user(id: ID!): User
}
type User {
id: ID!
name: String
}Resolver-Signaturen
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>
}
…Details und Einschränkungen
Erzeugte Typen wie QueryResolvers haben ContextType = any; erforderliche Argumente werden mit RequireFields typisiert, und Objekt-Resolver enthalten ein optionales __isTypeOf.
Es wird nur das Schema verwendet. Resolver-Signaturen hängen nicht von Operationen ab, daher hat die Seite keinen Editor Documents.
Die Java-Option gibt public interfaces mit DataFetcher-Methoden innerhalb von public class Resolvers im Package com.example.graphql aus. Alles läuft in einem Web Worker im Browser.
FAQ
Wie setze ich meinen eigenen Context-Typ?
Die Seite hat keine mapper- oder contextType-Optionen. Übergib deinen Context-Typ als Generic, zum Beispiel Resolvers<MyContext>, da jeder erzeugte Resolver-Typ ContextType akzeptiert.
Warum sind alle Resolver-Felder optional?
typescript-resolvers markiert standardmäßig jeden Feld-Resolver als optional, weil GraphQL-Server auf Standard-Resolver zurückfallen, die die Eigenschaft aus dem Parent-Objekt lesen.
Wie typisiert die Java-Option ID-Felder?
Felder vom Typ ID und Objekttypen werden als DataFetcher<Object> zurückgegeben; String-Felder werden zu DataFetcher<String>.