继承已实现类型 graphql 中的接口字段

Inherit interface fields in implemented types graphql

我有一个界面

interface Book {
 field1: String
 field2: String
 field3: String
 # it has 10 fields
}

我想用 10 种不同的类型来实现它。我怎样才能避免处理所有字段并粘贴到实现该接口的类型中

例如,我可以这样做吗:

type textBook implements Book{
  ...Book Fields
}

没有语法可以帮助您避免重复。如果接口定义了一个字段,则实现该接口的每个类型都必须显式定义该字段。充其量,如果您使用 graphql-tag 来创建类型定义,您可以使用插值来使事情变得更枯燥,但我个人认为降低代码的可读性是不值得的。这也意味着您不能将类型定义放在单独的 .graphql 文件中。

const sharedFields = `
  a: String
  b: String
`
const typeDefs = gql`
  type A {
    ${sharedFields}
  }
  type B {
    ${sharedFields}
  }
`

如果共享字段在概念上是相关的,你也可以考虑将它们做成一个单独的类型。

interface Book {
  bookFields: BookFields
}

type BookFields {
  field1: String
  field2: String
  field3: String
  # etc.
}