Skip to content

GraphQL Resolvers Signature Generator — Numio

Generates resolver type signatures for a GraphQL schema: TypeScript (default, typescript-resolvers), Flow (flow-resolvers) or Java (java-resolvers). The TypeScript output includes a Resolvers map with one typed resolver object per schema type.

Typing the resolvers object passed to Apollo Server or graphql-yoga so parent, args and return values are checked.

GraphQL Schema

When to use it

  • Typing the resolvers object passed to Apollo Server or graphql-yoga so parent, args and return values are checked.
  • Getting graphql-java DataFetcher interfaces for each type with the JAVA Resolvers Signature option.

How to use

  1. Paste the schema into the GraphQL Schema editor.
  2. Choose TypeScript Resolvers Signature, Flow Resolvers Signature or JAVA Resolvers Signature in the output dropdown.
  3. Copy the output; for TypeScript, annotate your resolver map with the generated Resolvers type.

GraphQL schema

type Query {
  user(id: ID!): User
}

type User {
  id: ID!
  name: String
}

Resolver signatures

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 and limitations

Generated types such as QueryResolvers have ContextType = any; required arguments are typed with RequireFields, and object resolvers include an optional __isTypeOf.

Only the schema is used. Resolver signatures do not depend on operations, so the page has no Documents editor.

The Java option outputs public interfaces of DataFetcher methods inside public class Resolvers, in package com.example.graphql. Everything runs in a browser Web Worker.

FAQ

How do I set my own context type?

The page has no mapper or contextType options. Pass your context type as the generic, for example Resolvers<MyContext>, since every generated resolver type accepts ContextType.

Why are all resolver fields optional?

typescript-resolvers marks every field resolver optional by default because GraphQL servers fall back to default resolvers that read the property from the parent object.

How does the Java option type ID fields?

Fields of type ID and object types are returned as DataFetcher<Object>; String fields become DataFetcher<String>.

Specifications and references