GraphQL - 扩展输入参数

Ada*_*kis 5 javascript apollo graphql

我正在尝试使用具有各种字段的类型来指定 GraphQL 模式,并且还允许您OR: [...]使用相同的参数递归地添加。我让它像这样工作

input BookFilters {
  _id: String
  title: String
  title_contains: String
  title_startsWith: String
  title_endsWith: String
  OR: [BookFilters]
}

type Query {
   allBooks(_id: String
     title: String
     title_contains: String
     title_startsWith: String
     title_endsWith: String
     OR: [BookFilters]
   ): [Book]
}
Run Code Online (Sandbox Code Playgroud)

效果很好,这个查询

{
  allBooks(title_endsWith: "1", OR: [{ title: "2" }, {title:"3"}, {OR: [{title_contains: "Q"}, {OR:[{title:"Q"}]}]}]) {
    _id
    title
  }
}
Run Code Online (Sandbox Code Playgroud)

过得很好。

我的问题是,有没有办法消除重复?理想情况下我会喜欢它

type Query {
   allBooks(...BookFilters): [Book]
}
Run Code Online (Sandbox Code Playgroud)

是有效的,但似乎不是。


编辑 - 评论带来了片段。它们只能一个类型中声明出来,对吗?所以我仍然有一个新类型来列出我所有的查询参数,然后从中制作一个片段,重新列出所有字段?

即使事实并非如此,GraphQL 似乎仍然不喜欢传播输入参数。

fragment BookFiltersFragment on BookFilters {
    _id
}

type Query {
   allBooks(...BookFiltersFragment): [Book]
}
Run Code Online (Sandbox Code Playgroud)

哪些错误出在 ...

小智 0

我们从纯 JS 而不是查询语言构建模式,并且能够使用扩展,因为我们的参数是纯旧的 javascript 对象。我相信“GraphQLInputType”是一个成熟的实例,不会轻易传播。