Sobes.tech
Back to questions
Middle
1

Как именно типизировать список с пагинацией? Как использовать пересечение типов для разных вариантов ответа?

Companies where asked
Chulakov

Answer from AI

sobes.tech AI

Для типизации списка с пагинацией в TypeScript обычно создают интерфейс, который описывает структуру ответа с данными и метаинформацией о пагинации:

interface PaginatedResponse<T> {
  items: T[];
  totalCount: number;
  page: number;
  pageSize: number;
}

// Пример использования:
interface User {
  id: number;
  name: string;
}

const response: PaginatedResponse<User> = {
  items: [{ id: 1, name: 'Alice' }],
  totalCount: 100,
  page: 1,
  pageSize: 10,
};

Для разных вариантов ответа с пересечением типов можно использовать оператор & (intersection), который объединяет свойства нескольких типов:

interface SuccessResponse {
  success: true;
  data: User[];
}

interface ErrorResponse {
  success: false;
  error: string;
}

// Пересечение для варианта с пагинацией и успехом
type PaginatedSuccessResponse = PaginatedResponse<User> & SuccessResponse;

// Использование
const result: PaginatedSuccessResponse = {
  items: [{ id: 1, name: 'Alice' }],
  totalCount: 50,
  page: 2,
  pageSize: 10,
  success: true,
  data: [{ id: 1, name: 'Alice' }],
};

Таким образом, пересечение типов позволяет комбинировать разные части ответа, обеспечивая строгую типизацию и удобство работы с разными вариантами API-ответов.