接口扩展了GraphQL模式中的多个接口

时间:2019-09-11 11:54:41

标签: inheritance graphql multiple-inheritance

在GraphQL中,一个接口可以扩展多个其他接口吗?
我需要这样的东西:

interface A
{
   valueA: String
}

interface B
{
   valueB: String
}

interface C extend interface A & B
{
   valueA: String
   valueB: String
}

type D implements C{
   valueA: String
   valueB: String
}

Is it possible to implement multiple interfaces in GraphQL?提供的解决方案涉及一种实现多个接口的类型,而不是扩展多个接口的一个接口

2 个答案:

答案 0 :(得分:1)

询问该问题的答案是否,接口无法扩展(或实现)其他接口

今天这个问题的答案是是的,接口可以实现其他接口,但是该功能尚未在任何开源GraphQL服务器中实现

RFC allowing interfaces to implement other interfaces已于2020年1月10日合并。此graphql-js规范的实现已于2019年10月8日合并,但尚未发布(最终将以graphql-js的形式发布) @ 15.0.0)。


对于某些用例,可以通过具有实现多个接口的类型来模拟此功能。例如,考虑以下模式:

interface Node {
  id: ID!
}

# Ideally we'd like to write `interface Pet implements Node`
# but that's not possible (yet)
interface Pet {
  id: ID!
  name: String!
}

type Cat implements Node, Pet {
  id: ID!
  name: String!
  prefersWetFood: Boolean!
}

然后我们可以实际编写查询

query {
  node(id: "sylviathecat") {
    ... on Pet {
      name
    }
  }
}

这是一个有效的查询,只要存在至少一个同时实现Pet的{​​{1}}实现(实际上,Node接口实际上不需要具有Pet字段)。

答案 1 :(得分:0)

只有类型可以实现一个接口。一个接口不能实现另一个接口。您可以看到定义为here的接口的语法,该语法明显缺少here所示的ImplementsInterfaces定义。

相关问题