Я хотел бы использовать функцию ТипORMfindAndCount, которая возвращает Promise<[Entity[], number]> для разбиения на страницы. Итак, у меня есть резольвер:
offers(@Arg('page', { defaultValue: 1 }) page: number): Promise<[Offer[], number]> {
const COUNT = 10
return this.offerRepository.findAndCount({ take: COUNT, skip: (page - 1) * COUNT })
}
Я также использую type-graphql и хочу аннотировать этот преобразователь аннотацией Query следующим образом:
@Query(returns => ???)
Однако я не могу понять тип возврата, я пробовал это (что, конечно, не сработало, из-за чего возвращается findAndCount):
@ObjectType()
class TestType {
@Field(type => [Offer])
offers: Offer[]
@Field()
count: number
}
И пытался использовать это так: @Query(returns => [TestType]) и это @Query(returns => TestType).






GraphQL не поддерживает кортежи, поэтому вам нужно создать тип объекта ответа:
@ObjectType()
class OffersResponse {
@Field(type => [Offer])
items: Offer[]
@Field(type => Int)
totalCount: number
}
А затем вручную сопоставьте кортеж с объектом:
@Query(returns => OffersResponse)
offers(@Arg('page', { defaultValue: 1 }) page: number): Promise<OffersResponse> {
const COUNT = 10
const [items, totalCount] = await this.offerRepository.findAndCount(
{ take: COUNT, skip: (page - 1) * COUNT }
)
return { items, totalCount }
}