Подтвердить что ты не робот

Тип Typescript - это Angular2 событие

Если у меня есть следующая кнопка в 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?

4b9b3361

Ответ 1

Как предложено @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…}

Вы всегда можете посетить документы для списка существующих События.

Edit

Вы также можете проверить TypeScript dom.generated.d.ts со всеми портированными символами. В вашем случае stopPropagation() является частью Event, расширенным на MouseEvent.

Ответ 2

В соответствии с официальным event имеет тип Object, также в моем случае, когда я typecaste 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

Ответ 3

Я уверен, что проблема не связана с вашим кодом. Я думаю, что что-то с вашей настройкой не так.

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

производит этот вывод

тестирование: я что-то делаю VM1901 app.ts! Transpiled: 26MouseEvent {isTrusted: true, screenX: 2878, screenY: 504, clientX: 67, clientY: 73...}

См. также https://plnkr.co/edit/xxaQbh?p=preview

Ответ 4

Некоторые часто используемые события и связанные с ними имена (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;
}