В декларации типов DOM описан интерфейс Event (строка
5032), в котором есть свойство target. Это свойство, как и описано
в документации, открывает доступ к объекту события, который должен быть реализован по интерфейсу EventTarget.
В свою очередь, декларация интерфейса EventTarget
содержит 3 метода управления событиями, которые могут быть вызваны на этом объекте. И все.
Однако на практике я могу в обработчике события обратиться к event.target, чтобы исследовать объект, на котором произошло событие. Например, выяснить тег элемента:
event.target.tagName
Этот код будет работать, хотя TS ругается, что такого свойства в интерфейсе не существует. Конечно, это обходится через утверждение типа (или override):
ev.target as Element
Но меня все равно не покидает ощущение, что я не понимаю логику этой декларации. Потому что кажется
практичным преобразовать этот интерфейс в тип с параметризацией:
type EventTarget<T = Element> = {...}