类型 '() => 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 其 onDisconnect
、onchange
和 ontypechange
方法定义如下:
static onDisconnect(): Observable<any>;
static onchange(): Observable<any>;
static ontypechange(): Observable<any>;
我有 onDisconnect
、onchange
和 ontypechange
作为自定义 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
为我工作,错误已解决。
我正在使用 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 其 onDisconnect
、onchange
和 ontypechange
方法定义如下:
static onDisconnect(): Observable<any>;
static onchange(): Observable<any>;
static ontypechange(): Observable<any>;
我有 onDisconnect
、onchange
和 ontypechange
作为自定义 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
为我工作,错误已解决。