Что именно я должен делать, когда получаю сообщение об ошибке «Объект, возможно, равен нулю» в TypeScript?

#typescript #error-handling #null #compiler-options

#typescript #обработка ошибок #null #параметры компилятора

Вопрос:

В compilerOptions объекте моего tsconfig.json файла у меня установлен strictNullChecks параметр true .

Иногда, когда я использую такие функции, как getElementById("...") или querySelector("...") , я получаю следующую (не фатальную) ошибку:

TS2531: объект, возможно, «нулевой»

Я знаю, почему я получаю эту ошибку (иногда элемент еще не загружен или его невозможно найти), но что именно я должен делать, когда получаю эту ошибку?

Было бы уместно просто поместить код, который использовал элемент (ы) внутри if условия, например:

 let divs: HTMLElement | null = document.getElementById("div");
if(divs !== null) {
  // do stuff with divs...
}
 

Или я должен сделать что-то еще?

Спасибо.

Ответ №1:

Было бы уместно просто поместить код, который использовал элемент (ы) внутри условия if

ДА. Как вы сказали, иногда элемента там нет, поэтому вы получаете null . Проверка на это уместна.

Если вам нужно использовать getElementById или querySelector в ситуации, когда вы знаете, что элемент есть, вы можете предоставить себе вспомогательную функцию, которая выдает, а не возвращает null :

 function getGuaranteed(id: string): HTMLElement {
    const el = document.getElementById(id);
    if (el == null) {
        throw new Error("Element #"   id   " not found.");
    }
    return el as HTMLElement;
}
 

… и используйте это в ситуациях, когда вы знаете, что элемент будет там.