输入&#39;()=&gt;可观察到的<任何>&#39;不能分配给&#39;()=&gt;可观察到的<任何>&#39;

时间:2017-03-21 01:48:36

标签: angular typescript ionic-framework static public

我正在使用typescript制作离子2应用,并且在将版本2.2.1的本地打字稿安装升级到版本2.1.0之后,我已经开始收到此错误:

  

输入&#39;()=&gt;观察到的&#39;不能分配给&#39;()=&gt;   观察到的&#39 ;.两种不同的类型               这个名字存在,但它们是无关的。输入&#39; Observable&#39;不能分配给&#39; Observable&#39;。               存在两种具有此名称的不同类型,但它们是不相关的。

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

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

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

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

我将onDisconnectonchangeontypechange作为自定义类(public类)的@Injectable()属性,名为&#34; Network&#34 ;我已将它们定义如下:

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

我有三个问题?

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

第二:虽然我知道我可以扩展课程,但我不想这样做。所以我要问,将我的方法声明为public而类中的static@Documented @IntDef({OpacityAnimationType.NONE, OpacityAnimationType.BLINKING, OpacityAnimationType.SHINY, OpacityAnimationType.AURA, }) public @interface OpacityAnimationType { int NONE = 0; int BLINKING = 1; int SHINY = 2; int AURA = 3; } 导致此问题会有区别吗?

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

编辑:

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

而失败了

3 个答案:

答案 0 :(得分:7)

你的node_modules树中潜伏着两个不同版本的rxjs,TS不知道它们是“相同的”。

首先要尝试的是清除整个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"

答案 1 :(得分:2)

这对我有用:

import { Observable }rxjs/observableimport { Observable }更改为rxjs;

答案 2 :(得分:0)

由于某个版本中RxJS与Ngrx v7之间不兼容,我遇到了类似的错误。将RxJS降级到〜6.4.0有所帮助。我为我运行了yarn add rxjs@~6.4.0,该错误已解决。