StrictNullChecks и getElementById

При использовании StrictNullChecks в TypeScript 2.0 код

var el: HTMLElement = document.getElementById('element_id');

вызывает ошибку

Type 'HTMLElement | null' is not assignable to type 'HTMLElement'.
Type 'null' is not assignable to type 'HTMLElement'.

Почему это и как я могу скомпилировать код, не делая el nullable?

Ответ 1

Вы можете написать:

var el = document.getElementById('element_id')!;

The! означает "поверьте мне, это не нулевая ссылка"

Ответ 2

Это потому, что document.getElementById(...); может возвращать экземпляр HTMLElement, если элемент найден, или null, если это не так. Поскольку этот API не находится под вашим контролем, вам придется изменить свой код, чтобы позволить элементу быть нулевым:

var el: HTMLElement | null = document.getElementById("...");

Вы также можете создать свои собственные псевдонимы псевдонимов:

type NullableHTMLElement = HTMLElement | null;
var el: NullableHTMLElement = document.getElementById("...");

Или еще лучше использовать решение AlexG, которое еще лучше!