Zum Inhalt springen

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.

GraphQL Schema

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

  1. Füge das Schema in den Editor GraphQL Schema ein.
  2. Wähle im Ausgabe-Dropdown TypeScript Resolvers Signature, Flow Resolvers Signature oder JAVA Resolvers Signature.
  3. 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>.

Spezifikationen und Referenzen