Вот определение EventTarget
(найденные в dom.generated.d.ts
, распределенный с машинописью):
interface EventTarget {
removeEventListener(type: string, listener: EventListener, useCapture?: boolean): void;
addEventListener(type: string, listener: EventListener, useCapture?: boolean): void;
dispatchEvent(evt: Event): boolean;
}
Для прикрепления событий могут быть другие классы, которые реализуют EventTarget
, поэтому самым безопасным определением API является установка Event.target
к объекту, который реализует EventTarget
, где подключены слушатели.
В контексте jQuery Event.target
почти наверняка будет иметь тип HTMLElement
(не тип JQuery
как в ответе Андрее). Для вашего примера jqEvent.target.attributes['tag']
, правильный путь, чтобы сообщить компилятору, что это на самом деле является Node
(прародитель интерфейс HTMLElement
), который действительно имеет attributes
свойство:
(<Node> jqEvent.target).attributes['tag']
выше литой также может быть HTMLElement
если вы явно обращаетесь к свойствам более конкретного интерфейса. Использование наиболее общего интерфейса возможно считается объектно-ориентированной передовой практикой.
lib.d.ts как любой файл декларации - не последнее слово о том, что произойдет. Если jqEvent действительно имеет тип JQueryEventObject, вы всегда можете его отличить. –