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 จะรู้สิ่งนั้น
ดูเหมือนว่าจะเป็นกรณีที่พบบ่อยมาก แต่ฉันไม่พบคำตอบ โปรดขออภัยหากมี