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