RxJs / Typescript抛出'property clientX does not exist on type {}'异常

8

我想做一些非常简单的事情,只需在鼠标悬停时记录event.clientX,并且这是模块代码:

import { Observable, Subject } from 'rxjs';
import StarSky from './starsky';
import constants from '../constants/index';

const HERO_Y = constants.HERO_Y(StarSky.canvas);

export const StarShip = Observable.fromEvent(StarSky.canvas,'mousemove')
  .map((event)=> {
    return {
      x: event.clientX,
      y: HERO_Y
    }
  })
  .startWith({
    x: StarSky.canvas.width /2,
    y: HERO_Y
  })

然后我稍后订阅它,就像这样:
StarShip.subscribe(x =>  console.log(x));

发生的情况是typescript编译器一直抛出这种特定类型的错误:
Property clientX does not exist on type {}

我猜测这是因为它仍然是一个空的Rx主题,并且clientX还没有初始化,因为需要通过mouseover来初始化。这有点傻,因为如果我删除.clientX,只留下事件作为x,它就可以正常记录了。
如何解决这种不兼容性并解决此错误?
编辑:
很抱歉,刚刚发现解决方法是放置类型声明。
(event: MouseEvent) => { ... }

就像这样。

1个回答

15

'property clientX does not exist on type {}'

这是因为这个可观察对象没有被定义类型:

Observable.fromEvent(StarSky.canvas,'mousemove')
您可以将注释添加为通用参数:

Observable.fromEvent<MouseEvent>(StarSky.canvas,'mousemove')

或者像你已经做过的那样,使用回调函数。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接