类型 '() => Observable<any>' 不可分配给类型 '() => Observable<any>'

Type '() => Observable<any>' is not assignable to type '() => Observable<any>'

我正在使用 typescript 制作 ionic 2 应用程序,在将本地 typescript 安装从版本 2.1.0 升级到版本 2.2.1 后,我开始收到此错误:

Type '() => Observable' is not assignable to type '() => Observable'. Two different types with this name exist, but they are unrelated. Type 'Observable' is not assignable to type 'Observable'. Two different types with this name exist, but they are unrelated.

以下每一行都会重复此错误

L28:  this.onDisconnect = Network.onDisconnect
L29:  this.onchange = Network.onchange
L30:  this.ontypechange = Network.ontypechange

Network 是从 ionic-native 导入的 class 其 onDisconnectonchangeontypechange 方法定义如下:

static onDisconnect(): Observable<any>;
static onchange(): Observable<any>;
static ontypechange(): Observable<any>;

我有 onDisconnectonchangeontypechange 作为自定义 class 的 public 属性(@Injectable() class) 称为 "Network",我将它们定义如下:

L15:  public onDisconnect: ()=>Observable<any>
L16:  public ontypechange: ()=>Observable<any>
L17:  public onchange: ()=>Observable<any>

我有三个问题?

首先:有人能帮我理解这个错误在打字稿中的真正含义以及为什么它会在我的代码中出现吗。

其次: 虽然我知道我可以延长 class,但我不想这样做。所以我想问,将我的方法声明为 public 而将 class 中的方法声明为 static 是否会导致此问题?

三:这两种在class上定义属性有什么区别?

编辑:

我刚刚意识到我之前曾尝试扩展网络 class 但由于静态声明而失败了

您的 node_modules 树中潜伏着两个不同版本的 rxjs,而 TS 不知道它们是 "same".

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

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

node_modules
  dependencyA
  rxjs
  dependencyB
    node_modules
      rxjs

如果发生这种情况,那么您将别无选择,只能追踪有问题的版本要求。例如,顶层 package.json 可能有 rxjs: "^5.2.0",而 dependencyB/package.json 可能有 rxjs: "5.0.0".

这对我有用:

import { Observable }rxjs/observable 更改为 import { Observable },从 rxjs

由于特定版本中 RxJS 和 Ngrx v7 之间的不兼容,我遇到了类似的错误。将 RxJS 降级到 ~6.4.0 有帮助。我 运行 yarn add rxjs@~6.4.0 为我工作,错误已解决。