Объясните значения цитаты из документации Typescript?
Читаю документацию про оператор ненулевого значения (!), возник вопрос.
Примеры из документации
Обычно в таких случаях стоит изменить архитектуру, но если разработчик в полной мере осознает последствия, то компилятор можно настоятельно попросить закрыть глаза на потенциально опасное место при помощи оператора 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() // снова ошибка
Спасибо большое за подробный ответ. Получается Non-null оператор нежелательно использовать в проекте, а нужно всегда использовать проверки на undefined?
VDone, это просто ваш выбор. Просто после этого оператора желательно проверку ввести, но в некоторых моментах вы можете это игнорировать.
Как например я поставив // @ts-ignore
Просто нужно это делать понимая
VDone,
type - игнорирует, что event может оказаться undefined и считает, что он не undefined
type2 - учитывает, что event может оказаться undefined и проверяет это, возвращая undefined, если event-undefined
Можешь ещё в своей IDE навестись мышкой на переменную - увидишь, что у них различаются типы.