Type 'IResolvers<any, any>' is not assignable to type 'GraphQLResolverMap<any>'. Index signatures are incompatible

Viewed 2113

I follow the guide for Apollo Federation: Implementing services

Code here:

import { ApolloServer, gql, IResolvers } from 'apollo-server';
import { buildFederatedSchema } from '@apollo/federation';
import faker from 'faker';

const MemoryDB = {
  users: [
    { id: 1, name: faker.name.findName() },
    { id: 2, name: faker.name.findName() },
  ],
};

const typeDefs = gql`
  type Query {
    userById(id: ID!): User
  }
  type User @key(fields: "id") {
    id: ID!
    name: String!
  }
`;

const resolvers: IResolvers = {
  Query: {
    me: (_, { id }, { db }) => {
      return db.users.find((u) => u.id === +id);
    },
  },
  User: {
    __resolveReference(user, { db }) {
      return db.users.find((u) => u.id === user.id);
    },
  },
};

const server = new ApolloServer({
  schema: buildFederatedSchema([{ typeDefs, resolvers }]), // TSC throw error here
});

TSC throw an type error:

Type 'IResolvers<any, any>' is not assignable to type 'GraphQLResolverMap'. Index signatures are incompatible. Type '(() => any) | GraphQLScalarType | IEnumResolver | IResolverObject<any, any, any> | IResolverOptions<any, any, any>' is not assignable to type 'GraphQLScalarType | { [enumValue: string]: string | number; } | { [fieldName: string]: GraphQLFieldResolver<any, any, { [argName: string]: any; }> | { requires?: string | undefined; resolve: GraphQLFieldResolver<...>; }; }'. Type '() => any' is not assignable to type 'GraphQLScalarType | { [enumValue: string]: string | number; } | { [fieldName: string]: GraphQLFieldResolver<any, any, { [argName: string]: any; }> | { requires?: string | undefined; resolve: GraphQLFieldResolver<...>; }; }'. Type '() => any' is not assignable to type '{ [fieldName: string]: GraphQLFieldResolver<any, any, { [argName: string]: any; }> | { requires?: string | undefined; resolve: GraphQLFieldResolver<any, any, { [argName: string]: any; }>; }; }'. Index signature is missing in type '() => any'.ts(2322)

Package versions:

"apollo-server": "^2.12.0",
"@apollo/federation": "^0.17.0",

It seems that IResolvers interface is incompatible, but GraphQLResolverMap interface is not exposed so I can't import and use. I don't want to cast the type of resolvers to any type. Is this a bug?

UPDATE

The issue still there after updating apollo-server to "apollo-server": "^2.15.1",

1 Answers

I believe that GraphQLResolverMap is elsewhere, try:

import { GraphQLResolverMap } from 'apollo-graphql';

and then use it instead of IResolvers.

Related