graphql-модули не вызывают __resolveType - PullRequest
1 голос
/ 04 июля 2019

Я не совсем уверен относительно цели / действия функции __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, кажется, работает, но не кажется идеальным решением

...