Как правильно присвоить несколько interface переменной typescript

У меня есть такой код на Typescript

const data: ICompetitions | IApiRequestError = yield competitions.json();

в одном интерфейсе описаны данные которые возвращает api, а интерфейс IApiRequestError описывает возвращаемые api данные в случае ошибки

export interface ICompetitions {
    data: any;
    competitions: Array<ICompetitionOne>,
    count: number,
    filters: object
}

export interface IApiRequestError {
    message: string,
    error: number
}

Но почему то когда я задаю условие

if(data.error) {

}

Мне высвечивает ошибку

Свойство "error" не существует в типе "ICompetitions | IApiRequestError". Свойство "error" не существует в типе "ICompetitions".ts(2339)

Как правильно поступить в данном случае?


Ответы (1 шт):

Автор решения: Юрий Копоть
export interface ICompetitions {
  data: any;
  count: number;
  filters: object;
}

export interface IApiRequestError {
  message: string;
  error: number;
}

const dataResult: ICompetitions | IApiRequestError = yield competitions.json();
// Проверка уникального полня любого из interface
if ('count' in dataResult) {
  // теперь dataResult тут как ICompetitions
  const {data, count, filters} = dataResult;
} else {
  // а тут как IApiRequestError
  const {error, message} = dataResult;
}
→ Ссылка