Graphql - 如何包含其他类型的模式

Graphql - How to include schema from other types

假设我有以下类型:

type Foo {
  id: ID!
  field1: String
}

现在,我想定义另一种类型,其中包括较早的类型。像这样:

type Bar {
  ...Foo,
  field2: String
}

如何在 graphql 中实现上述目标?我想基本上首先创建一个类型,然后将该类型包含在其他类型的定义中,这样我就不必多次键入所有属性。

我正在使用 Amplify/AWS Appsync,所以如果有任何我可以使用的特殊指令也会有所帮助

GraphQL 有概念 interfaces for this. Appsync, AWS's GraphQL implementation, supports interfaces

[编辑:]GraphQL 不支持接口的“...spread”语法。字段是明确定义的。 Spread 语法确实出现在 GraphQL 中,但是以 Fragments 的形式,用于减少查询重复的字段的可重用单元。

interface Character {
  id: ID!
  name: String!
  friends: [Character]
  appearsIn: [Episode]!
}

type Human implements Character {
  id: ID!
  name: String!
  friends: [Character]
  appearsIn: [Episode]!
  starships: [Starship]
  totalCredits: Int
}

type Droid implements Character {
  id: ID!
  name: String!
  friends: [Character]
  appearsIn: [Episode]!
  primaryFunction: String
}

Amplify 会自动创建 AppSync 架构、解析器和数据源,这显然是一个更困难的故事。 amplify-cli 存储库有一个开放的功能请求,Does the GraphQL Transformer support interfaces?。我不是 Amplify 专家,但快速浏览 loooong 功能请求评论线程表明 Amplify 的答案是 “不是 out-of-the-box”,但 “也许在狭窄的环境或高级定制下工作".