Используйте discriminated union по полю status: data объявляется только в варианте success.
Как в TypeScript описать состояние запроса, в котором поле `data` существует только при статусе `success`, а при `loading` или `error` недоступно?
Используйте discriminated union по полю status: data объявляется только в варианте success.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Используйте discriminated union по полю status: data объявляется только в варианте success.
Пример:
type RequestState<T> =
| { status: 'loading' }
| { status: 'error'; error: string }
| { status: 'success'; data: T };
function read<T>(state: RequestState<T>) {
if (state.status === 'success') return state.data;
return undefined;
}
После проверки status TypeScript сужает вариант. Поле data?: T в одном общем интерфейсе не выражает такую же строгую связь между статусом и данными.