【问题标题】: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;
    }
    

    您还可以将&lt;HammerInput&gt; 作为通用参数添加到fromEvent,因此返回给您的事件属于正确的类型。

    const panUnfilteredRaw$ = fromEvent<HammerInput>(hammerPan as unknown as JQueryStyleEventEmitter, 'panstart panmove panend').pipe(share());
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-03
      • 2016-08-15
      • 2014-05-01
      • 1970-01-01
      • 2013-10-08
      相关资源
      最近更新 更多