В разделе распознавателей по умолчанию документации Graphql-tools говорится:
- Возвращает свойство из obj с соответствующим именем поля или
- Вызывает функцию в obj с соответствующим именем поля и передает аргументы запроса в эту функцию
https://www.apollographql.com/docs/graphql-tools/resolvers.html#Default-resolver
Тип определения:
type AggregateMessage {
count: Int!
}
Для данного преобразователя запросов:
Query: {
async messagesConnection(root: any, args: any, context: any, info: any) {
const messages: IMessageDocument[] = await messageController.messages();
const edges: MessageEdge[] = [];
for (const node of messages) {
edges.push({
node: node,
cursor: node.id
});
}
// return messages;
return {
pageInfo: {
hasNextPage: false,
hasPreviousPage: false
},
edges: edges,
aggregate: {
count: () => {
// Resolve count only
return 123;
}
}
};
}
}
Так что, если я вручную определю преобразователь, как это, он будет работать.
AggregateMessage: {
count(parent: any, args: any, context: any, info: any) {
return parent.count();
// Default resolver normally returns parent.count
// I want it to return parent.count() by default
}
}
Но если я удалю определение и буду использовать разрешение по умолчаниюфункциональность не работает.
Я ожидаю, что она вызовет функцию parent.count () согласно пункту # 2 в документации, если я удалю ручной распознаватель и буду полагаться на поведение распознавателя по умолчанию для вызова функции наназвание объекта.
Вызывает функцию в obj с соответствующим именем поля и передает аргументы запроса в эту функцию.
Однако это выдает ошибку типа, поскольку "count" определяется как тип Int, ноэто на самом деле функция.Как я могу сделать это правильно, чтобы была вызвана функция count и возвращено значение при разрешении, без необходимости самостоятельно определять преобразователь?
Int cannot represent non-integer value: [function count]