Sobes.tech
Middle

TypeScriptda backend javoblarini qanday tiplashtirasiz, agar bir endpoint turli tuzilmalarda javob qaytaradigan bo‘lsa: sahifalash bilan ro‘yxat, xato yoki bo‘sh natija? Bu turlarni butun loyiha bo‘ylab qulay foydalanish uchun qanday tashkil qilasiz?

sobes.tech AI

AIdan javob

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

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