Middle
Hoe zou je de backend-antwoorden in TypeScript typen als een endpoint verschillende structuren kan retourneren: een lijst met paginering, een fout of een lege resultaat? Hoe organiseer je de types zodat ze handig te gebruiken zijn door het hele project?
sobes.tech AI
Antwoord van 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), чтобы определить тип ответа. - Удобно использовать типы по всему проекту, импортируя их из одного файла с типами.
Если ответов много и они сложные, можно дополнительно использовать дженерики и утилиты для переиспользования общих частей типов.