【问题标题】:How do I fix this typescript and graphql error?如何修复这个 typescript 和 graphql 错误?
【发布时间】:2020-10-06 10:50:13
【问题描述】:

在我的索引文件中,我尝试使用 graphql-tools 方法 makeExicutableSchemabuildSchema 将我所有的 typedef 和解析器聚合到一个 GraphQLSchema[] 中,然后从 graphql-yoga 放入 GraphQLServer。

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;
};

这是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'.

【问题讨论】:

  • 您可能正在使用两个不同版本的 GraphQL 库。这是 JS 包中的一个基本缺陷,很少讨论。您可以将 GraphQL 的版本固定在 yarnnpm 中。

标签: typescript graphql


【解决方案1】:

我通过将架构分配给任何类型找到了解决方法 const schema: any = mergeSchemas({ schema });

【讨论】:

    【解决方案2】:

    我遇到了同样的问题,并通过将 package.json 中的 graphql 版本更改(降级)为与 @types/graphql 相同来修复它。

    正如 Herku(在评论部分)所说:

    您可能正在使用两个不同版本的 GraphQL 库。这是 JS 包的根本缺陷

    我认为这是正确的答案。

    我的 package.json 的一部分

    【讨论】:

      猜你喜欢
      • 2021-04-19
      • 2017-09-02
      • 1970-01-01
      • 1970-01-01
      • 2020-06-17
      • 2021-07-06
      • 2019-04-23
      • 2021-09-11
      • 1970-01-01
      相关资源
      最近更新 更多