@romaro

Я что-то не так понимаю в декларации типа Event для DOM?

В декларации типов DOM описан интерфейс Event (строка 5032), в котором есть свойство target. Это свойство, как и описано в документации, открывает доступ к объекту события, который должен быть реализован по интерфейсу EventTarget.

В свою очередь, декларация интерфейса EventTarget содержит 3 метода управления событиями, которые могут быть вызваны на этом объекте. И все.

Однако на практике я могу в обработчике события обратиться к event.target, чтобы исследовать объект, на котором произошло событие. Например, выяснить тег элемента:
event.target.tagName

Этот код будет работать, хотя TS ругается, что такого свойства в интерфейсе не существует. Конечно, это обходится через утверждение типа (или override):
ev.target as Element

Но меня все равно не покидает ощущение, что я не понимаю логику этой декларации. Потому что кажется практичным преобразовать этот интерфейс в тип с параметризацией:
type EventTarget<T = Element> = {...}
  • Вопрос задан
  • 87 просмотров
Пригласить эксперта
Ответы на вопрос 1
Maksclub
@Maksclub
maksfedorov.ru
Интерфейс не содержит нужных полей, нужно указать тип примерно так
(event.target as EventTarget). tagName
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы