如何在严格模式下将HammerJS中的RxJS fromEvent()与HammerJS结合使用

时间:2019-01-23 19:47:37

标签: javascript rxjs hammer.js

以下代码在打字稿严格模式下给出了错误:

       const hammerTap = new Hammer(nativeElement, 
        {
            recognizers: [
                [Hammer.Tap, { taps: 4 }]
            ]
        });

        const tap$ = fromEvent(hammerTap, 'tap').pipe(share());
  

“ HammerManager”类型的参数无法分配给的参数   键入“ FromEventTarget <{}>”。类型“ HammerManager”不可分配   键入“ JQueryStyleEventEmitter”。       属性“ on”的类型不兼容。         类型'(事件:字符串,处理程序:HammerListener)=>无效'不能分配给类型'(事件名称:字符串,处理程序:功能)=>无效'。           参数“处理程序”和“处理程序”的类型不兼容。             类型“功能”不可分配给类型“ HammerListener”。               类型'Function'不提供签名'(event:HammerInput):void'的匹配项。

1 个答案:

答案 0 :(得分:0)

该问题只能在@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());