【问题标题】:How to use RxJS fromEvent() with HammerJS in strict mode如何在严格模式下使用 RxJS fromEvent() 和 HammerJS
【发布时间】:2019-01-23 19:47:36
【问题描述】:
以下代码在 typescript 严格模式下出错:
const hammerTap = new Hammer(nativeElement,
{
recognizers: [
[Hammer.Tap, { taps: 4 }]
]
});
const tap$ = fromEvent(hammerTap, 'tap').pipe(share());
“HammerManager”类型的参数不能分配给
输入“FromEventTarget”。类型“HammerManager”不可分配
键入“JQueryStyleEventEmitter”。
'on' 的属性类型不兼容。
类型“(事件:字符串,处理程序:HammerListener)=> void”不可分配给类型“(事件名称:字符串,处理程序:函数)=> void”。
参数 'handler' 和 'handler' 的类型不兼容。
类型“Function”不可分配给类型“HammerListener”。
类型 'Function' 与签名 '(event: HammerInput): void' 不匹配。
【问题讨论】:
标签:
javascript
rxjs
hammer.js
【解决方案1】:
只有在@types/hammerjs 中才能真正解决问题,但您可以这样做:
const tap$ = fromEvent(<JQueryStyleEventEmitter> <unknown> hammerTap, 'tap').pipe(share());
或
const tap$ = fromEvent(hammerTap as unknown as JQueryStyleEventEmitter, 'tap').pipe(share());
JQueryStyleEventEmitter 定义如下,并且是 RxJS 的一部分,所以不用担心 - 你没有以任何形式或形式包含 JQuery。
export interface JQueryStyleEventEmitter {
on: (eventName: string, handler: Function) => void;
off: (eventName: string, handler: Function) => void;
}
您还可以将<HammerInput> 作为通用参数添加到fromEvent,因此返回给您的事件属于正确的类型。
const panUnfilteredRaw$ = fromEvent<HammerInput>(hammerPan as unknown as JQueryStyleEventEmitter, 'panstart panmove panend').pipe(share());