【问题标题】:Interface extends multiple interfaces in GraphQL Schema接口扩展了 GraphQL Schema 中的多个接口
【发布时间】:2020-01-13 06:17:02
【问题描述】:

在 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? 提供的解决方案是指一种type实现多个接口,而不是一个interface扩展多个interfaces

【问题讨论】:

  • 这里的answere 指的是一个实现多个接口的类型...请不要将其标记为重复,因为这是不同类型的问题..请仔细看我的描述。我需要一个 interface 扩展多个接口,而不是一个 type 实现多个接口。Tnx

标签: inheritance graphql multiple-inheritance


【解决方案1】:

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

【讨论】:

  • 奇怪的是不可能做到interface B extends AnotherInterface {}type A implements B
【解决方案2】:

当被问到这个问题时,答案是不,接口不可能扩展(或实现)其他接口

今天这个问题的答案是 是的,接口可以实现其他接口,但该功能尚未在任何开源 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
    }
  }
}

只要存在至少一个同时实现NodePet 实现,这是一个有效的查询(事实上,Pet 接口实际上根本不需要id: ID! 字段)。

【讨论】:

  • 您的答案详细而有用,但您仍然应该编辑它。问题是关于扩展接口而不是实现它们。也许编辑类似于“......今天这个问题的答案仍然是否,尽管接口可以实现其他接口”就足够了?我还建议添加刚刚发布的graphql-js@15.0.0。
  • > 问题是关于扩展接口而不是实现它们。扩展和实现之间的区别在这里似乎相当迂腐。最初的问题使用了扩展这个词,但给出的代码示例实际上会被归类为接口实现其他接口。
  • 在某些方面你是对的,但已经有另一个关于在 graphql 中实现接口的问题,adnan.mujkic 特别评论说他的问题不是它的重复。
  • 虽然在某些方面我必须同意你的看法。我个人看不出在 graphql 中实现和扩展接口之间的区别。如果它在其他地方,则接口无法实现另一个接口。它通常用于上课。他提到的问题是关于实现接口的类型......总而言之,正如你所说,我可能是迂腐的:)
猜你喜欢
  • 1970-01-01
  • 2015-10-16
  • 2012-10-23
  • 2016-04-28
  • 1970-01-01
  • 2011-01-14
  • 1970-01-01
  • 2019-10-14
  • 2022-11-10
相关资源
最近更新 更多