Что я должен вернуть, если объект не найден в TypeScript с использованием строгого режима?
Вот фрагмент кода в машинописи с strictNullChecks: true
getItem(key: string): T {
let index: number = this.contains(key); // returns -1 if not found
if (index === -1) {
return null; // error null is not assignable to type 'T'
}
return this.map[index].value;
}
Как вы можете видеть, я не могу вернуть ноль, когда я не нашел элемент из-за ошибки компиляции:
Ошибка 'NULL' не присваивается типу 'T'
Что я должен вернуть вместо нуля? Какова лучшая практика?
1 ответ
При строгой проверке нуля любая функция, которая возвращает что-то, что может быть "не найдено", должно иметь возвращаемый тип, объявленный как Something | undefined
и он должен вернуться undefined
значение в случае "не найдено".
Также возможно использовать null
вместо undefined
, и как тип, и как возвращаемое значение, но выбор был сделан, и система типов TypeScript использует undefined
не null
для представления неинициализированных и необязательных значений - например, тип необязательного свойства (объявлен с ?
знак) T | undefined
,
Смотрите также эту цитату, упомянутую пользователем cale_b в комментариях:
рациональным является то, что в JavaScript есть две концепции для обращения к пустому значению часового, у большинства других языков программирования есть только одна. Более того, undefined присутствует всегда, так как все неинициализированные значения имеют значение undefined во время выполнения. null, с другой стороны, можно избежать, особенно если вы не используете какие-либо API, которые его производят, например, DOM, который не использует компилятор TypeScript.