以下代码在打字稿严格模式下给出了错误:
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'的匹配项。
答案 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());