Який тип Typescript - це подія Angular2


89

Якщо у мене є така кнопка у файлі html

<button (click)="doSomething('testing', $event)">Do something</button>

Крім того, у відповідному компоненті я маю цю функцію

doSomething(testString: string, event){
    event.stopPropagation();
    console.log(testString + ': I am doing something');
}

Чи існує належний тип, який слід призначити $eventвводу? Сам параметр події є об'єктом, АЛЕ якщо я призначу його об'єкту типу, я отримую помилку

Властивість 'stopPropogation' не існує для об'єкта типу

Отже, що Typescript вважає $eventвхідними даними?


5
doSomething(testString: string, event: MouseEvent)
Ерік Мартінес

1
Ерік Мартінес: Чи можете ви залишити свій коментар як відповідь? Це прояснило всі прапори, які я отримував, тому я сприймаю це як правильне.
Alex J,

Відповіді:


74

Як запропонував @AlexJ

Подія, яку ви пройшли, $eventє подією DOM, тому ви можете використовувати EventNameтип як тип.

У вашому випадку ця подія є MouseEvent, і в документі сказано, цитування

Інтерфейс MouseEvent представляє події, які відбуваються внаслідок взаємодії користувача з вказівним пристроєм (наприклад, мишею). Загальні події з допомогою цього інтерфейсу включають клацання, DblClick, MouseUp, MouseDown .

У всіх цих випадках ви отримаєте MouseEvent.

Інший приклад: якщо у вас є цей код

<input type="text" (blur)="event($event)"

Коли подія спрацює, ви отримаєте FocusEvent.

Таким чином, ви можете зробити це дуже просто, зафіксуйте подію в консолі, і ви побачите повідомлення, подібне до цього, що ми будемо мати назву події

FocusEvent {isTrusted: true, relatedTarget: null, view: Window, detail: 0, which: 0…}

Ви завжди можете відвідати документи, щоб переглянути список існуючих подій .

Редагувати

Ви також можете перевірити TypeScript dom.generated.d.tsз усіма перенесеними типізаціями. У вашому випадку stopPropagation()це частина Event, продовжена на MouseEvent.


Дивіться цю відповідь щодо типу HTMLInputEvent.
hlovdal

1
Слід зазначити, що якщо подія походить від компонента Angular через @Output, як правило, поле компонента типу EventEmitter<T>, тоді тип $eventаргументу є T. Див. Angular.io/api/core/EventEmitter .
jfroy

26

Деякі загальновживані події та пов'язані з ними імена ( MouseEvent , FocusEvent , TouchEvent , DragEvent , KeyboardEvent ):

| MouseEvent | FocusEvent |  TouchEvent | DragEvent | KeyboardEvent |
|:----------:|:----------:|:-----------:|:---------:|:-------------:|
|    click   |    focus   |  touchstart |    drag   |    keypress   |
|   mouseup  |    blur    |  touchmove  |    drop   |     keyup     |
| mouseleave |   focusin  | touchcancel |  dragend  |    keydown    |
|  mouseover |  focusout  |   touchend  |  dragover |               |

Загальна Подія пов'язана з:

  • закрити
  • змінити
  • недійсний
  • грати
  • скинути
  • прокрутка
  • виберіть
  • подати
  • перемикання
  • очікування

Якщо ви копаєтеся у сховищі Typescript , dom.generated.d.ts надає глобальний інтерфейс подій (заслуга відповідає відповіді Еріка ), де ви можете знайти всі відображення обробників подій у рядку 5725 :

interface GlobalEventHandlersEventMap {
  "abort": UIEvent;
  "animationcancel": AnimationEvent;
  "animationend": AnimationEvent;
  "animationiteration": AnimationEvent;
  "animationstart": AnimationEvent;
  "auxclick": MouseEvent;
  "blur": FocusEvent;
  "cancel": Event;
  "canplay": Event;
  "canplaythrough": Event;
  "change": Event;
  "click": MouseEvent;
  "close": Event;
  "contextmenu": MouseEvent;
  "cuechange": Event;
  "dblclick": MouseEvent;
  "drag": DragEvent;
  "dragend": DragEvent;
  "dragenter": DragEvent;
  "dragexit": Event;
  "dragleave": DragEvent;
  "dragover": DragEvent;
  "dragstart": DragEvent;
  "drop": DragEvent;
  "durationchange": Event;
  "emptied": Event;
  "ended": Event;
  "error": ErrorEvent;
  "focus": FocusEvent;
  "focusin": FocusEvent;
  "focusout": FocusEvent;
  "gotpointercapture": PointerEvent;
  "input": Event;
  "invalid": Event;
  "keydown": KeyboardEvent;
  "keypress": KeyboardEvent;
  "keyup": KeyboardEvent;
  "load": Event;
  "loadeddata": Event;
  "loadedmetadata": Event;
  "loadend": ProgressEvent;
  "loadstart": Event;
  "lostpointercapture": PointerEvent;
  "mousedown": MouseEvent;
  "mouseenter": MouseEvent;
  "mouseleave": MouseEvent;
  "mousemove": MouseEvent;
  "mouseout": MouseEvent;
  "mouseover": MouseEvent;
  "mouseup": MouseEvent;
  "pause": Event;
  "play": Event;
  "playing": Event;
  "pointercancel": PointerEvent;
  "pointerdown": PointerEvent;
  "pointerenter": PointerEvent;
  "pointerleave": PointerEvent;
  "pointermove": PointerEvent;
  "pointerout": PointerEvent;
  "pointerover": PointerEvent;
  "pointerup": PointerEvent;
  "progress": ProgressEvent;
  "ratechange": Event;
  "reset": Event;
  "resize": UIEvent;
  "scroll": Event;
  "securitypolicyviolation": SecurityPolicyViolationEvent;
  "seeked": Event;
  "seeking": Event;
  "select": Event;
  "selectionchange": Event;
  "selectstart": Event;
  "stalled": Event;
  "submit": Event;
  "suspend": Event;
  "timeupdate": Event;
  "toggle": Event;
  "touchcancel": TouchEvent;
  "touchend": TouchEvent;
  "touchmove": TouchEvent;
  "touchstart": TouchEvent;
  "transitioncancel": TransitionEvent;
  "transitionend": TransitionEvent;
  "transitionrun": TransitionEvent;
  "transitionstart": TransitionEvent;
  "volumechange": Event;
  "waiting": Event;
  "wheel": WheelEvent;
}

3

Згідно з офіційним eventтипом Object, також у моєму випадку, коли я eventввожу каскад в Об'єкт, він не видає жодної помилки, але після прочитання документації знайденого angular2 eventє тип, EventEmitterщоб ви могли ввести касту вашої події вEventEmitter

див. тут plunkr для того самого http://plnkr.co/edit/8HRA3bM0NxXrzBAjWYXc?p=preview

для отримання додаткової інформації зверніться тут https://angular.io/docs/ts/latest/guide/template-syntax.html#!#event-binding

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.