Обычно в таких случаях стоит изменить архитектуру, но если разработчик в полной мере осознает последствия, то компилятор можно настоятельно попросить закрыть глаза на потенциально опасное место при помощи оператора Not-Null Not-Undefined.
type UserEvent = {type: string }
function handler(event?:UserEvent) :void{
// @ts-ignore // гасим предупреждение
let type = event.type; // тут возможно undefined
console.log('type: ' + type)
}
function handler1(event?:UserEvent) :void{
console.log('тут вы плюнули на все и надеетесь на лучшее')
let type = event!.type; // тут вы плюнули на все и надеетесь на лучшее
}
function handler2(event?:UserEvent) :void{
if(event && event.type) // тут проверили что есть event и у него есть свойство type
{
let type = event.type;
console.log(type)
}
console.log('бодрячком')
}
// console.log('test')
handler({type: 'aaaa'}) // нормально
handler2()
handler2({type: 'bbbbb'})
handler() // ошибка в рантайме, потому что мы задавили ошибку
handler1() // снова ошибка