Sobes.tech
Middle

Wie würdest du die Antworten des Backends in TypeScript typisieren, wenn ein Endpoint unterschiedliche Strukturen zurückgeben kann: eine paginierte Liste, einen Fehler oder ein leeres Ergebnis? Wie würdest du die Typen organisieren, damit sie im gesamten Projekt bequem verwendet werden können?

sobes.tech KI

Antwort von 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), чтобы определить тип ответа.
  • Удобно использовать типы по всему проекту, импортируя их из одного файла с типами.

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