Впервые добавляю Typescript в свой проект.
В одном месте я использовал window.document.getElementById
для доступа к чему-то. И это дает эту ошибку.
Type error: Object is possibly 'null'. TS2531
Я искал в Интернете, но не смог найти лучшее решение для этого. окно никогда не может быть нулевым. Как я могу исправить эту ошибку? Пожалуйста, помогите.
Ааа, теперь есть проблема. это было связано с тем, что элемент может быть нулевым. Спасибо! :D
window.document.getElementById("foobar");
Либо возвращает HTMLElement
, либо null
Как вы могли бы использовать подобное утверждение раньше: window.document.getElementById("foobar").value
Typescript жалуется на то, что это значение может быть недоступно, и вы должны явно проверить это раньше.
Чтобы избежать этого, вы можете сделать следующее:
const element = window.document.getElementById("foobar");
if (element !== null) {
alert(element.value);
}
запись этого в переменную сработала для меня, так как использование ! это не вариант, потому что это действительно противоречит цели строгого режима. также строгий режим также имеет правило «запрещенное ненулевое утверждение», чтобы остановить использование !
ТС делает свою работу и говорит вам, что window.document.getElementById("foobar")
МОЖЕТ вернуть то, что есть null
.
Если вы абсолютно уверены, что элемент #foobar
ДЕЙСТВИТЕЛЬНО существует в вашей DOM, вы можете показать TS свою уверенность с помощью оператора !
.
// Notice the "!" at the end of line
const myAbsolutelyNotNullElement = window.document.getElementById("foobar")!
Или вы можете добавить проверку на нулевое значение во время выполнения, чтобы сделать TS счастливым
const myMaybeNullElement = window.document.getElementById("foobar")
myMaybeNullElement.nodeName // <- error!
if (myMaybeNullElement === null) {
alert('oops');
} else {
// since you've done the nullable check
// TS won't complain from this point on
myMaybeNullElement.nodeName // <- no error
}
Спасибо! ТС выдавал верную ошибку. Я просто не понял, что это было для элемента, а не для окна.
Typescript жалуется, что объект, результат выполнения window.document.getElementById
в вашем случае, может быть нулевым.
Это можно отключить с помощью флага strictNullChecks
в вашем tsconfig.json
, что я не рекомендую.
В качестве альтернативы вы можете выполнять проверки, предложенные в других ответах, или, начиная с Typescript 3.7, использовать синтаксис Необязательная цепочка, чтобы сделать ваш код более кратким:
obj?.doSometething(); //good, will not do something.
obj?.prop = 'plop'; //not good because it does not work with assignments.
Добавь это. ( ? ) в массиве, Пример:
form.get('description')?.errors
Здесь вы должны убедиться, что ваш window.document.getElementById("id_name")!
установлен. Вы можете попробовать это
const element = window.document.getElementById("id_name");
if (element){
console.info(element);
}
Это потому, что вы должны установить тип.
const checkbox = document.getElementById("toggleFilter") as HTMLInputElement
checkbox.checked = true
Вы уверены, что
window
— единственное, что равно нулю?