Задать вопрос
@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> = {...}
  • Вопрос задан
  • 101 просмотр
Подписаться 1 Средний 1 комментарий
Помогут разобраться в теме Все курсы
  • Skillbox
    Курс по TypeScript
    3 месяца
    Далее
  • Merion Academy
    Онлайн-курс по TypeScript
    2 месяца
    Далее
  • Stepik
    TypeScript с 0 до ПРО | Решение задач по TS, разбор сложных тем
    1 неделя
    Далее
Пригласить эксперта
Ответы на вопрос 1
Интерфейс не содержит нужных полей, нужно указать тип примерно так
(event.target as EventTarget). tagName
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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