isTypeOf
- это функция, которая передается в конструктор GraphQLObjectType при программном создании схемы. То же самое для resolveType
функций и союзов / интерфейсов. Если вы используете SDL и создаете свою схему, используя buildSchema
, невозможно внедрить эти функции в созданную вами схему, так же как у вас нет способа предоставить средства распознавания для полей типов, отличных от Query
и * 1005. *.
У вас есть несколько вариантов. Один из вариантов - использовать поведение по умолчанию resolveType
. Это проверяет свойство __typename
объекта и возвращается к вызову isTypeOf
для каждого реализующего типа, пока он не совпадет. Это означает, что если вы используете класс, этого должно быть достаточно, например:
export default class Todo {
get __typename() {
return 'Todo'
}
}
Лучшим вариантом будет сбросить buildSchema
и использовать makeExecutableSchema
с graphql-tools
. Затем вы можете определить свои функции resolveType
и / или isTypeOf
непосредственно в ваших резольверах. Например:
const resolvers = {
Query: {
node: (obj, args, context, info) => {
return new Todo('1', 'Todo 1')
}
},
INode: {
__resolveType: (obj, context, info) => {
if (obj instanceof Todo) return 'Todo'
},
}
}
Вы можете не только легко определить isTypeOf
или resolveType
, вы также можете легко добавить средства распознавания для полей любого типа и добавлять собственные скаляры без каких-либо хлопот. Вы не можете сделать это (легко), если вы используете просто buildSchema
.