type Item = {
left?: { photoSrc: string };
};
type ItemRequired = {
left: { photoSrc: string };
};
const item: Item = {} as any;
if (item.left) {
const itemRequired: ItemRequired = item; // fails. Typescript still says left may be undefined
// I'd like Typescript to know that field left is truthy
}
Я знаю об охранниках определяемого пользователем типа. Например.
function isFish(pet: Fish | Bird): pet is Fish {
return (pet as Fish).swim !== undefined;
}
Мои вопросы:
- Почему Typescript не может сделать вывод, что
left
не может быть неопределенным? - Означает ли это, что мне нужно создать функцию защиты типа для каждого варианта типа, который мне нужно проверить? Нет ли способа попроще? Например. Я ожидаю, что если вы попадете в область действия проверки if, которая доказывает, что поле
left
не может быть неопределенным, я ожидаю, что Typescript это знает.
Это кажется очень частым случаем, но я не смог найти ответа, извините, пожалуйста, если он есть.