То, что описывает блог, объединяет определения типов, подобные этому:
const typeDefsA = `
type Query {
_: Boolean
}
`
const typeDefsB = `
extend type Query {
someField: String
}
`
Чтобы назвать это сшивание схемы - это неправильное выражение . Сшивание схемы включает в себя объединение нескольких отдельных служб GraphQL в одну схему. В статье, на которую вы ссылаетесь, описывается только структурирование вашего проекта таким образом, чтобы определения типов для вашей отдельной схемы располагались в нескольких файлах .
Кроме того, все, что мы делаем, - это то, что в противном случае было быодна строка, представляющая нашу схему и разбивающая ее на несколько строк, которые мы затем объединяем. Мы хотим иметь возможность определять поля для наших типов Query
и Mutation
в этих определениях типов. Однако мы не можем просто сделать это:
type Query {
someField: Boolean
}
type Query {
someOtherField: String
}
Это приведет к ошибке, поскольку мы определили два типа с одинаковым именем. Вместо этого мы должны использовать ключевое слово extend
для extend
существующего типа:
type Query {
someField: Boolean
}
# this says "add these fields to our existing type"
extend type Query {
someOtherField: String
}
# so does this
extend type Query {
yetAnotherField: String
}
Однако, чтобы использовать ключевое слово extend
, у нас должен быть хотя бы один тип для фактического расширения,Это также приведет к ошибке:
extend type Query {
someField: Boolean
}
extend type Query {
someOtherField: String
}
Учитывая, что при разбиении определений типов обычно имеется строка определений базового типа, которая предоставляет базовые типы для трех операций (Query, Mutation иПодписка). Тогда все ваши определения других типов могут безопасно расширять эти типы, не беспокоясь. Эти определения «базовых» типов также являются хорошим местом для типов, которые совместно используются в разных файлах.
И наконец, обратите внимание, что при этом также нет необходимости предоставлять какие-либо поля для базовых типов операций. При условии, что вы расширяете базовые типы операций в других местах вашей схемы, вы можете просто сделать:
type Query
extend type Query {
someField: String
}