如何在不重复的情况下在其他文件中使用graphql类型进行关系

How to use graphql type in other files for relationship without duplication

我正在尝试将不同目录中的所有表分开。但是,我遇到了一些问题。查看下面的 ExpenseItem。 ExpenseType 位于 ExpenseType 目录下,因此 graphql 会抛出错误。为了解决这个问题,我需要在 ExpeseItem/typeDefs 中添加多余的 ExpenseType。

ExpenseItem/typeDefs

   type ExpenseItem {
        id: ID!
        name: String,
        updatedAt: DateTime,
        expenseType: [ExpenseType]
    }

有没有更好的拼接模式的方法?

我也试过类似的方法。但是,graphql 停止工作。 当我查询时,它没有进入解析器,设置有什么问题吗?

const schemas = makeExecutableSchema({
  typeDefs: `
    scalar JSON
    scalar DateTime
    type Query {
      test: String
    }
    ${typeDefs1}
    ${typeDefs2}
    ${typeDefs3}
    ${typeDefs4}

  `,
  resolvers: {
    // Type resolvers
    JSON: GraphQLJSON,
    DateTime: GraphQLDateTime,

    // schema resolvers
    ...resolvers1,
    ...resolvers2,
    ...resolvers3,
    ...resolvers4
  }

})

const server = new ApolloServer({
  schema,

  context: { db }
 })

你不能像这样合并你的解析器。使用扩展运算符合并对象会导致 浅合并 。如果合并的对象共享任何公共属性(例如 Query),则只有最后合并的 属性 会出现在结果对象中。您需要深度合并 对象。您可以自己这样做,或者使用类似 lodashmerge.

此外,您可以将字符串数组作为 typeDefs 传递给 makeExecutableSchema,而不是自己组合它们。