В большинстве случаев вам не нужно самостоятельно удалять значения переменных.Это может быть недостатком дизайна.Также обратите внимание, что если вы хотите удалить значение свойства объекта, может быть более целесообразно использовать это:
delete myObject.attr; // set 'undefined'
Я не понимаю причины, по которой не допускаются значения NULLTypescript и флаг strictNullChecks.
Чтобы понять логику, проверьте этот пример:
// strictNullChecks: false
interface Sample {
color: string;
width: number;
}
function doSomething(sample: Sample): Sample {
if(sample.width > 10) {
return null;
}
return sample;
}
const first: Sample = {
color: 'red',
width: 15
};
const second: Sample = doSomething(first);
console.log(second.width); // Uncaught TypeError: Cannot read property 'width' of null
Playground
Этот код компилируетсятолько без strictNullChecks
флага.В этом контексте при запуске кода возникает прекрасная ошибка: Uncaught TypeError: Cannot read property 'width' of null
.
Проверьте функцию doSomething
.Возвращает тип Sample
, но без флага мы можем вернуть null
.Проблема здесь в том, что когда мы вызываем эту функцию, возвращаемое значение будет обрабатываться как Sample
=> Существует несоответствие между типом и его реальным типом значения. Это огромная причина ошибок.
Мне нравится думать, что типизации TS должны отражать наилучшие реальные типы значений.