Back to questions
Middle
1
Как бы ты типизировал ответы backend в TypeScript, если один endpoint может возвращать разные структуры: список с пагинацией, ошибку или пустой результат? Как организовать типы, чтобы это было удобно использовать по всему проекту?
Companies where asked
Chulakov
Answer from 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), чтобы определить тип ответа. - Удобно использовать типы по всему проекту, импортируя их из одного файла с типами.
Если ответов много и они сложные, можно дополнительно использовать дженерики и утилиты для переиспользования общих частей типов.