Mac*_*tko 5 rxjs typescript 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
})
Run Code Online (Sandbox Code Playgroud)
然后我订阅它,喜欢:
StarShip.subscribe(x => console.log(x));
Run Code Online (Sandbox Code Playgroud)
发生的事情是,typescript编译器不断抛出这种特殊类型的错误:
Property clientX does not exist on type {}
Run Code Online (Sandbox Code Playgroud)
我猜测因为它仍然是一个空的Rx主题,而clientX尚未存在,因为它需要通过鼠标悬停初始化.这有点愚蠢,因为如果我删除.clientX,并event留在那里x,它会毫无问题地退出.
如何解决这种不兼容问题并解决此错误?
编辑:
对不起,刚发现解决方案就是输入类型声明
(event: MouseEvent) => { ... }
Run Code Online (Sandbox Code Playgroud)
像这样.
bas*_*rat 10
属性clientX在类型{}上不存在
这是因为没有输入observable:
Observable.fromEvent(StarSky.canvas,'mousemove')
Run Code Online (Sandbox Code Playgroud)
您可以将注释添加为通用参数:
Observable.fromEvent<MouseEvent>(StarSky.canvas,'mousemove')
Run Code Online (Sandbox Code Playgroud)
或者像你所做的那样回调.
| 归档时间: |
|
| 查看次数: |
1485 次 |
| 最近记录: |