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

Posted

技术标签:

【中文标题】在实现的类型graphql中继承接口字段【英文标题】:Inherit interface fields in implemented types graphql 【发布时间】:2020-06-17 05:57:42 【问题描述】:

我有一个界面

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

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

例如,我可以这样做吗:

type textBook implements Book
  ...Book Fields

【问题讨论】:

【参考方案1】:

没有语法可以帮助您避免重复。如果接口定义了字段,则实现该接口的每个类型都必须显式定义该字段。充其量,如果您使用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.

【讨论】:

以上是关于在实现的类型graphql中继承接口字段的主要内容,如果未能解决你的问题,请参考以下文章

将没有 ID 字段的表用于 GraphQL 服务器进行中继

如何在 GraphQL 中继承或扩展 typeDef

中继/ graphql:可为空的响应或捕获查询错误的方法

GraphQL Relay 自省查询失败:“查询”类型上的未知字段“__type”

出现错误:“Query”类型的“user”字段上的未知参数“id”[GraphQL,Relay,React]

GraphQL,中继:处理错误