Решите задачу TypeScript: есть тип Response с взаимоисключающими полями payload и error, причём их типы могут отличаться. Нужно типизировать функции payloadFrom(response), возвращающую payload или undefined, и errorFrom(response), возвращающую error или undefined, чтобы возвращаемые типы выводились автоматически из входного Response.

Опишите ответ как union взаимоисключающих ветвей и выведите возвращаемое значение условным типом из конкретного входного типа.

Короткий ответ

Что ответить на собеседовании

Опишите ответ как union взаимоисключающих ветвей и выведите возвращаемое значение условным типом из конкретного входного типа.

Подробный разбор

Ответ с пояснениями

Условие

Решите задачу TypeScript: есть тип Response с взаимоисключающими полями payload и error, причём их типы могут отличаться. Нужно типизировать функции payloadFrom(response), возвращающую payload или undefined, и errorFrom(response), возвращающую error или undefined, чтобы возвращаемые типы выводились автоматически из входного Response.

Ответ

Опишите ответ как union взаимоисключающих ветвей и выведите возвращаемое значение условным типом из конкретного входного типа.

Пример модуля, не конфликтующего с глобальным DOM Response:

export type Response<P, E> =
  | { payload: P; error?: never }
  | { error: E; payload?: never };
type PayloadOf<R> = R extends { payload: infer P } ? P : undefined;
type ErrorOf<R> = R extends { error: infer E } ? E : undefined;
export function payloadFrom<R extends Response<unknown, unknown>>(r: R): PayloadOf<R> {
  return r.payload as PayloadOf<R>;
}
export function errorFrom<R extends Response<unknown, unknown>>(r: R): ErrorOf<R> {
  return r.error as ErrorOf<R>;
}
const value = payloadFrom({ payload: 42 }); // number
const absent = payloadFrom({ error: 'failed' }); // undefined

Условные типы распределяются по union: для обеих возможных ветвей результат включает undefined. Локальные assertions связывают реализацию с контрактом, но не валидируют внешний JSON.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее