Код Junior Утилитарные типы обновлено
Generic-пагинация с метаданными
Условие
Напиши paginate<T>(items: readonly T[], page: number, perPage: number): Page<T>, где
type Page<T> = { items: T[]; page: number; perPage: number; total: number; pages: number; hasNext: boolean }.
Страницы с 1. Номер страницы меньше 1 считается первой, больше последней даёт пустой список (но page в ответе остаётся запрошенным после поправки снизу). pages при пустом списке 0.
Примеры
paginate([1, 2, 3, 4, 5], 1, 2) // {"items":[1,2],"page":1,"perPage":2,"total":5,"pages":3,"hasNext":true}
paginate([1, 2, 3, 4, 5], 3, 2) // {"items":[5],"page":3,"perPage":2,"total":5,"pages":3,"hasNext":false}
paginate([1, 2, 3], 0, 10) // {"items":[1,2,3],"page":1,"perPage":10,"total":3,"pages":1,"hasNext":false}
Как подойти
Подсказки: 1
readonly T[]на входе: функция обещает не мутировать массив, и принимает и обычные, и readonly-массивы.
Решите в тренажёре
Редактор с автотестами прямо в браузере. Можно решить спокойно, вслух или под таймером, как на собесе.