Я не совсем уверен в назначении/действии функции __resolveType на интерфейсе/объединении, но я предполагаю, что это добавление поля __typename с разрешенным типом. Однако я не могу заставить это работать с graphql-modules. Здесь как подмножество, но достаточное подмножество моей схемы.
const typeDefs = gql`
interface Node {
id: ID!
}
type User implements Node {
id: ID!
email: String!
password: String
}
type Group implements Node {
id: ID!
name: String!
}
type Query {
node(id: ID!): Node
}`;
И мой резольвер внизу.
const resolvers = {
Query: {
node: () => {
return { id: 'abc', email: '[email protected]', password: 'test' };
}
},
Node: {
__resolveType: () => {
console.info('__resolveType');
return 'User';
}
}
}
Которые вместе объединяются в модуль.
const Module = new GraphQLModule({
resolvers,
typeDefs,
});
Используется с сервером Apollo.
const server = new ApolloServer({
modules: [Module],
})
// Launch etc...
Но при запросе node __resolveType не регистрируется, и я получаю следующую ошибку.
Abstract type Node must resolve to an Object type at runtime for field Query.node with { id: "abc", email: "[email protected]" password: "test" }, received "undefined". Either the Node type should provide a "resolveType" function or each possible type should provide an "isTypeOf" function."
Что я делаю не так, и как мне решить эту проблему?
Небольшое примечание: добавление __typename: 'User' в возвращаемый объект в Query.node, похоже, работает, но не кажется идеальным решением.





У меня та же проблема, могу подтвердить, что __resolveType никогда не вызывается при использовании graphql-модулей. Я собираюсь поднять вопрос в репо и сослаться на этот SO. Опубликую любой ответ, который я получу.
Об этом уже сообщалось в проблемах репо, и исправление заключалось в передаче схемы модуля верхнего уровня на сервер apollo, а не в виде модулей.
({
schema: Appmodule.schema,
context: session => session
})
см. проблему здесь. https://github.com/Urigo/graphql-modules/issues/619
Могу подтвердить, что это работает