Ваша карта преобразователя настроена неправильно.
Карта преобразователя, переданная в ApolloServer
(или makeExecutableSchema
), должна быть объектом, ключи которого являются именами типов в вашей схеме, при каждом сопоставлении ключей другому объекту, ключи которого являются именами полей этого типа. Затем каждое имя поля сопоставляется с функцией распознавателя.
const resolvers = {
SomeType: {
someField: (parent, args, context, info) => { ... },
},
}
Вы используете ту же карту преобразователя, чтобы передать функцию resolveType
для объединения или интерфейса. Шаблон такой же, но имя типа - это имя объединения или интерфейса, и вместо имени поля используется ключ __resolveType
:
const resolvers = {
SomeType: {
someField: (parent, args, context, info) => { ... },
},
SomeUnion: {
__resolveType: (parent) => { ... },
}
}
Функция resolveType
должна всегда вернуть строку, которая соответствует имени существующего типа объекта в вашей схеме.
Если вы используете __isTypeOf
вместо __resolveType
, то это будет выглядеть немного иначе, поскольку функция isTypeOf
связана с конкретный тип объекта, а не интерфейс или объединение. Это все показано в документах . Таким образом, карта разрешения выглядит следующим образом:
const resolvers = {
SomeType: {
someField: (parent, args, context, info) => { ... },
__isTypeOf: (parent) => { ... },
},
}
__isTypeOf
всегда должен возвращать либо true
, либо false
, в зависимости от того, является ли переданный объект на самом деле этим типом.
Вам нужно всего лишь использовать __resolveType
или __isTypeOf
. Если вы используете __isTypeOf
, вы должны добавить его ко всем возможным типам объектов в объединении или интерфейсе.