Что я должен вернуть, если объект не найден в TypeScript с использованием строгого режима? - PullRequest
0 голосов
/ 10 мая 2018

Вот фрагмент кода в машинописи с 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 Ответ

0 голосов
/ 10 мая 2018

При строгой проверке нуля любая функция, которая возвращает что-то, что может быть «не найдено», должна иметь тип возвращаемого значения, объявленный как Something | undefined, и она должна возвращать значение undefined в случае «не найдено».

Также возможно использовать null вместо undefined, как в качестве типа, так и в качестве возвращаемого значения, но выбор был сделан, и система типов TypeScript использует undefined, а не null для представления неинициализированных и необязательных значений - например, тип необязательного свойства (объявленного со знаком ?): T | undefined.

См. Также эту цитату упомянуто пользователем cale_b в комментариях:

рациональным является то, что JavaScript имеет две концепции для обозначения пустого Значение часового, у большинства других языков программирования есть только один. Кроме того, неопределенное присутствует всегда, так как все неинициализированные значения иметь значение undefined во время выполнения. с другой стороны, нуль можно избежать, особенно если вы не используете API, которые его производят, например DOM, который не использует компилятор TypeScript.

...