【问题标题】:RxJs / Typescript throws 'property clientX does not exist on type {}'RxJs / Typescript 抛出“类型 {} 上不存在属性 clientX”
【发布时间】:2016-08-27 20:32:53
【问题描述】:

我正在尝试做一些非常简单的事情,只需在鼠标悬停时记录 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));

发生的事情是打字稿编译器不断抛出这种特殊类型的错误:

Property clientX does not exist on type {}

我猜是因为它仍然是一个空的 Rx 主题,并且 clientX 还不在那里,因为它需要通过鼠标悬停进行初始化。这有点傻,因为如果我删除.clientX,并将event 保留为x,它会毫无问题地注销。

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

编辑:

不好意思,刚刚发现解决办法是放类型声明

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

就这样。

【问题讨论】:

    标签: typescript rxjs rxjs5


    【解决方案1】:

    '类型 {} 上不存在属性 clientX'

    这是因为 observable 没有输入:

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

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

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

    或者你所做的回调。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-27
      • 2023-04-02
      • 2018-08-17
      • 1970-01-01
      • 2023-02-06
      • 1970-01-01
      相关资源
      最近更新 更多