#graphql #graphql-js
#graphql #graphql-js
Вопрос:
Я пытаюсь определить свою схему GraphQL с помощью graphql
библиотеки. Схема, которую я пытаюсь достичь, упрощенная, заключается в следующем:
type TypeA {
fieldA: String
fieldAorB: TypeAorB
}
type TypeB {
fieldB: String
}
union TypeAorB = TypeA | TypeB
Я изо всех сил пытаюсь понять, как добиться этого с помощью библиотеки graphql, учитывая, что я не могу определить тип объединения до определения других типов.
Надеюсь, этот фрагмент подчеркивает мое затруднительное положение.
import * as graphql from "graphql";
const typeA = new graphql.GraphQLObjectType({
name: "TypeA",
fields: {
fieldA: { type: graphql.GraphQLString },
fieldAorB: { type: [???] } // what goes here?
},
});
const typeB = new graphql.GraphQLObjectType({
name: "TypeB",
fields: {
fieldB: { type: graphql.GraphQLString }
},
});
const typeAorB = new graphql.GraphQLUnionType({
name: "TypeAorB",
types: [typeA, typeB],
});
Ответ №1:
После повторного прочтения документации:
Когда два типа должны ссылаться друг на друга, или тип должен ссылаться на себя в поле, вы можете использовать выражение функции (оно же замыкание или удар) для ленивого заполнения полей.
fields
может быть замыканием, которое может быть разрешено позже.
т.е.,
const typeA = new graphql.GraphQLObjectType({
name: "TypeA",
fields: () => ({ // note: closure, not object.
fieldA: { type: graphql.GraphQLString },
fieldAorB: { type: typeAorB }
}),
});