Наследовать поля интерфейса в реализованных типах graphql - PullRequest
1 голос
/ 04 марта 2020

У меня есть интерфейс

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

, и я хочу реализовать его в 10 различных типах. Как я могу избежать копирования всех полей и вставки в типы, которые реализуют этот интерфейс

, например, я могу сделать что-то вроде этого:

type textBook implements Book{
  ...Book Fields
}

1 Ответ

0 голосов
/ 04 марта 2020

Нет синтаксиса, который помог бы вам избежать повторения. Если интерфейс определяет поле, каждый тип, который реализует интерфейс, должен явно определять это поле. В лучшем случае, если вы используете 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.
}
...