RxJs / Typescript抛出'属性clientX在类型{}'上不存在

时间:2016-05-02 23:32:04

标签: typescript rxjs rxjs5

我正在尝试做一些非常简单的事情,只需在mouseover上记录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还没有存在,因为它需要通过鼠标悬停初始化。这有点愚蠢,因为如果我删除.clientX,并将event保留为x,则会立即注销。

如何解决这种不兼容问题并解决此错误?

编辑:

对不起,刚发现解决方案是输入类型声明

(event: MouseEvent) => { ... }

就像这样。

1 个答案:

答案 0 :(得分:9)

  

'属性clientX在{}'

类型上不存在

这是因为没有输入observable:

Observable.fromEvent(StarSky.canvas,'mousemove')

您可以将注释添加为通用参数:

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

或者你所做的回调。