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