Sobes.tech
Middle
27

TypeScript-те бір endpoint әртүрлі құрылымдарды қайтарса, мысалы, беттелген тізім, қате немесе бос нәтиже, оны қалай типтеу керек? Жобаның барлық жерінде пайдалану үшін типтерді қалай ұйымдастыру керек?

Сұралған компаниялар
Chulakov

AI-дан жауап

sobes.tech AI

Для типизации ответов backend, которые могут возвращать разные структуры (например, список с пагинацией, ошибку или пустой результат), удобно использовать объединения (union types) и интерфейсы в TypeScript.

Пример организации типов:

interface Pagination {
  page: number;
  pageSize: number;
  total: number;
}

interface Item {
  id: string;
  name: string;
  // другие поля
}

interface SuccessResponse {
  data: Item[];
  pagination: Pagination;
}

interface EmptyResponse {
  data: [];
  pagination: Pagination;
}

interface ErrorResponse {
  error: string;
  code: number;
}

// Объединенный тип ответа
type ApiResponse = SuccessResponse | EmptyResponse | ErrorResponse;

// Пример функции обработки ответа
function handleResponse(response: ApiResponse) {
  if ('error' in response) {
    console.error('Ошибка:', response.error);
  } else if (response.data.length === 0) {
    console.log('Пустой результат');
  } else {
    console.log('Данные:', response.data);
  }
}

Такой подход позволяет:

  • Четко описать каждую возможную структуру ответа.
  • Использовать проверку по наличию ключей (например, error), чтобы определить тип ответа.
  • Удобно использовать типы по всему проекту, импортируя их из одного файла с типами.

Если ответов много и они сложные, можно дополнительно использовать дженерики и утилиты для переиспользования общих частей типов.