Что я должен вернуть, если объект не найден в 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.

Другие вопросы по тегам