Дело не в том, что Type1
не эквивалентно Type2
Например, следующее не приведет к ошибке
function displayItem(item: Type1) {
loadItem(item);
}
function loadItem(item: Type2) {}
Проблема возникает, когда вы набираете item.id
что могло быть две вещи. Поскольку Type1
определяется как export type Type1 = { id: string } | { id: number };
, тип этой переменной может быть string
или number
. Таким образом, машинописный текст создает другой тип для {id: item.id}
, который равен {id: number | string}
, как вы видите, он несовместим с Type2
.
Вы должны явно указать, какой тип вы хотите использовать.
Следующее сообщение не даст никаких ошибок
function displayItem(item: Type1) {
loadItem({ id: item.id as number});
}
Теперь я помечу item.id
как number
, поэтому тип { id: item.id as number}
равен {id: number}
, который совместим с Type2
Просто измените свои типы на следующие
export type Type1 = { id: string | number};
export type Type2 = { id: string | number};