如何在其他文件中使用graphql类型来处理关系而不重复

如何在其他文件中使用graphql类型来处理关系而不重复,graphql,apollo-server,Graphql,Apollo Server,我正在尝试将不同目录中的所有表分开。然而,我遇到了一些问题。请看下面的费用项目。ExpenseType位于ExpenseType目录下,因此graphql抛出错误。为了解决这个问题,我需要在ExpenseItem/typeDefs中添加ExpenseType,这是多余的 ExpenseItem/typeDefs type ExpenseItem { id: ID! name: String, updatedAt: DateTime,

我正在尝试将不同目录中的所有表分开。然而,我遇到了一些问题。请看下面的费用项目。ExpenseType位于ExpenseType目录下,因此graphql抛出错误。为了解决这个问题,我需要在ExpenseItem/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
),则结果对象中将只显示最后一个合并的属性。您需要深度合并对象。您可以自己这样做,或者使用类似于
lodash
merge


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

最终以数组格式传递解析程序[resolver1,resolver2,{JSON:GraphQLJSON,}]