Type assertion. Преобразование к типу

Последнее обновление: 15.05.2021

Type assertion представляет модель преобразования значения переменной к определенному типу. Обычно в некоторых ситуациях одна переменная может представлять какой-то широкий тип, например, any или union, которые по факту допускают значения различных типов. Однако при этом нам надо использовать переменную как значение строго определенного типа. И в этом случае мы можем привести к этому типу.

В качестве примера возьмем простейшую задачу - на веб-странице есть html-элемент с id = header, и мы хотим получить этот элемент, например, чтобы изменить его текст. Для получения элемента по id мы могли бы использовать встроенную js-функцию document.getElementById():

const header = document.getElementById("header");
header.innerText = "Hello Typescript!";

Но в TypeScript эта функция возвращает объединение HTMLElement|null. То есть возвращаемое значение может представлять null, если соответствующий html-элемент отсутствует на веб-странице. Вследствие этого обращение к свойству header.innerText - к свойству объекта, который может быть null, содержит потенциальную ошибку. Поэтому компилятор при компиляции сгенерирует ошибку.

Однако ситуация может быть такова, что мы точно знаем, что у нас на странице есть такой элемент. Есть разные способы для решения этой проблемы, чтобы указать компилятору, что все нормально. И одним из ним является приведение типов с помощью type assertion.

Есть две формы приведения. Первая форма заключается в использовании угловых скобок:

const header = <HTMLElement>document.getElementById("header");
header.innerText = "Hello Typescript!";

Перед значением в угловых скобках указывается тип, к которому надо выполнить приведение. Так, в данном случае мы получаем объект типа HTMLElement

Вторая форма заключается в применении оператора as, после которого указывается тип, к которому надо выполнить преобразование:

const header = document.getElementById("header") as HTMLElement;
header.innerText = "Hello Typescript!";

Однако такие преобразования будут иметь силу, если мы точно знаем, что значение может быть преобразовано к целевому типу. Например, на странице есть элемент с id=header, поэтому мы можем преобразовать значение к типу HTMLElement. Однако если такого элемента нет, то во время выполнения мы опять же получим ошибку.

Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850