Как реализовать типизированную постраничную навигацию с помощью generics?

Generic задаёт тип элементов страницы, а metadata пагинации остаётся общей. Ответ API всё равно требует runtime-проверки.

Короткий ответ

Что ответить на собеседовании

Generic задаёт тип элементов страницы, а metadata пагинации остаётся общей. Ответ API всё равно требует runtime-проверки.

Подробный разбор

Ответ с пояснениями

Generic задаёт тип элементов страницы, а metadata пагинации остаётся общей. Ответ API всё равно требует runtime-проверки.

Пример модели:

type Page<T> = {
  items: T[];
  page: number;
  pageSize: number;
  total: number;
};
function hasNext<T>(result: Page<T>): boolean {
  return result.page * result.pageSize < result.total;
}
type User = { id: string; name: string };
type UserPage = Page<User>;

Здесь page начинается с 1, pageSize положителен, total — общее число записей. Для cursor pagination нужен другой контракт с nextCursor, а не подмена его номером страницы.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее