类型'()=> Observable <any>'不能赋值为'()=> Observable <any>'

dav*_*oem 5 static public typescript ionic-framework angular

我正在使用typescript创建一个离子2应用程序,在将本地typescript安装升级到版本后2.2.1,2.1.0我已经开始收到此错误:

类型'()=> Observable'不能赋值为'()=> Observable'.存在两种具有此名称的不同类型,但它们是不相关的.类型'Observable'不能分配给'Observable'类型.存在两种具有此名称的不同类型,但它们是不相关的.

对于以下每一行重复此错误

L28:  this.onDisconnect = Network.onDisconnect
L29:  this.onchange = Network.onchange
L30:  this.ontypechange = Network.ontypechange
Run Code Online (Sandbox Code Playgroud)

Network是从进口的一类ionic-nativeonDisconnect,onchange并且ontypechange方法被定义为如下:

static onDisconnect(): Observable<any>;
static onchange(): Observable<any>;
static ontypechange(): Observable<any>;
Run Code Online (Sandbox Code Playgroud)

我有onDisconnect,onchangeontypechange作为名为"网络" public的自定义类(@Injectable()类)的属性,我已按如下方式定义它们:

L15:  public onDisconnect: ()=>Observable<any>
L16:  public ontypechange: ()=>Observable<any>
L17:  public onchange: ()=>Observable<any>
Run Code Online (Sandbox Code Playgroud)

我有三个问题?

第一:有人会帮我理解错误在打字稿中的真正含义以及为什么它会在我的代码中出现.

第二:虽然我知道我可以扩展课程,但我不想这样做.所以我在问,在声明我的方法public时有什么区别,因为类中的那些是static导致这个问题的?

第三:这两种在类中定义属性的区别是什么?

编辑:

我刚刚意识到我之前尝试过扩展Network类,但由于静态声明而失败了

小智 8

你的node_modules树中有两个不同版本的rxjs ,而TS并不知道它们是"相同的".

首先要尝试清除整个node_modules目录,刷新npm缓存,然后重做npm install.

如果这不能解决问题,那么潜在的问题可能是不同的依赖项指定了不兼容的rxjs版本,迫使npm为其中一个或多个引入一个单独版本的rxjs(它将放在node_modules目录中)一些模块下).你会看到一个像这样的结构

node_modules
  dependencyA
  rxjs
  dependencyB
    node_modules
      rxjs
Run Code Online (Sandbox Code Playgroud)

如果这是正在发生的事情,那么除了追踪违规版本要求之外你别无选择.例如,顶级package.json可能有rxjs: "^5.2.0",但dependencyB/package.json可能有rxjs: "5.0.0".