@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> = {...}
  • Вопрос задан
  • 71 просмотр
Пригласить эксперта
Ответы на вопрос 1
Maksclub
@Maksclub
maksfedorov.ru
Интерфейс не содержит нужных полей, нужно указать тип примерно так
(event.target as EventTarget). tagName
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы