Я не совсем уверен относительно цели / действия функции __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: 'a@b.c', password: 'test' };
}
},
Node: {
__resolveType: () => {
console.log('__resolveType');
return 'User';
}
}
}
, которые вместе объединяются в модуль.
const Module = new GraphQLModule({
resolvers,
typeDefs,
});
Используется с сервером Apollo, как.
const server = new ApolloServer({
modules: [Module],
})
// Launch etc...
Но при запросе node
__resolveType не регистрируется, и я получаю следующую ошибку.
Абстрактный тип Node должен преобразовываться в тип Object во время выполнения для поля Query.node с {id: "abc", email: "a@b.c" password: "test"}, получено "undefined". Либо тип Node должен обеспечивать функцию «resolType», либо каждый возможный тип должен предоставлять функцию «isTypeOf». "
Что я делаю не так, и как бы я решил эту проблему?
Краткое примечание: добавление __typename: 'User'
в возвращаемый объект в Query.node
, кажется, работает, но не кажется идеальным решением