How do I fix this typescript and graphql error?

Viewed 2673

In my index file, I am trying to congregate all of my typedefs and resolvers into a GraphQLSchema[] with graphql-tools methods makeExicutableSchema and buildSchema to then put into the GraphQLServer from graphql-yoga.

import { importSchema } from "graphql-import";
import { GraphQLServer } from 'graphql-yoga';
import * as path from 'path';
import * as fs from 'fs';
import { createTypeOrmConnection } from "./utils/createTypeOrmConn";
import { mergeSchemas, makeExecutableSchema } from "graphql-tools";
import { GraphQLSchema } from 'graphql';

export const startServer = async () => {
  const schemas: GraphQLSchema[] = [];
  const folders = fs.readdirSync(path.join(__dirname, "./modules"));
  folders.forEach(folder => {
    const { resolvers } = require(`./modules/${folder}/resolvers`);
    const typeDefs = importSchema(
      path.join(__dirname, `./modules/${folder}/schema.graphql`)
    );
    schemas.push(makeExecutableSchema({
      resolvers,
      typeDefs
    }));
  });

  const server = new GraphQLServer({
    schema: mergeSchemas({ schemas })
  });
  await createTypeOrmConnection();
  const app = await server.start({port: process.env.NODE_ENV === "test" ? 0 : 4000})
  console.log('Server is running on http://localhost:4000')

  return app;
};

And this is the error is at schema: mergeSchema({ schemas }):

Type 'import("/Users/jackrisse/Projects/project-da-league/backend/node_modules/graphql/type/schema").GraphQLSchema' is not assignable to type 'import("/Users/jackrisse/Projects/project-da-league/backend/node_modules/apollo-utilities/node_modules/graphql/type/schema").GraphQLSchema'.
  The types returned by 'getQueryType()' are incompatible between these types.
    Type 'Maybe<GraphQLObjectType<any, any>>' is not assignable to type 'Maybe<GraphQLObjectType<any, any, { [key: string]: any; }>>'.
      Type 'GraphQLObjectType<any, any>' is not assignable to type 'Maybe<GraphQLObjectType<any, any, { [key: string]: any; }>>'.
        Types of property 'isTypeOf' are incompatible.
          Type 'import("/Users/jackrisse/Projects/project-da-league/backend/node_modules/graphql/jsutils/Maybe").Maybe<import("/Users/jackrisse/Projects/project-da-league/backend/node_modules/graphql/type/definition").GraphQLIsTypeOfFn<any, any>>' is not assignable to type 'import("/Users/jackrisse/Projects/project-da-league/backend/node_modules/apollo-utilities/node_modules/graphql/tsutils/Maybe").default<import("/Users/jackrisse/Projects/project-da-league/backend/node_modules/apollo-utilities/node_modules/graphql/type/definition").GraphQLIsTypeOfFn<any, any>>'.
            Type 'GraphQLIsTypeOfFn<any, any>' is not assignable to type 'Maybe<GraphQLIsTypeOfFn<any, any>>'.
              Types of parameters 'info' and 'info' are incompatible.
                Property 'cacheControl' is missing in type 'import("/Users/jackrisse/Projects/project-da-league/backend/node_modules/apollo-utilities/node_modules/graphql/type/definition").GraphQLResolveInfo' but required in type 'import("/Users/jackrisse/Projects/project-da-league/backend/node_modules/graphql/type/definition").GraphQLResolveInfo'.
2 Answers

I figured out a way around it by assigning schema to type of any const schema: any = mergeSchemas({ schema });

I had the same issue and fixed it by change(down-grade) the version of graphql in package.json to the same as the @types/graphql.

As Herku( in comment secction) said :

You might be working with two different versions of the GraphQL library. This is a fundamental flaw in JS packages

and I think it's right answer.

Part of my package.json <@types is in the very top and package is in very bottom> Part of my package.json

Related