如何在TypeScript 2.4和RxJS 5.x中解决此"主题错误地扩展Observable"错误?

Dan*_*ser 47 rxjs typescript rxjs5 typescript2.4

当我编译时,我在RxJS声明文件中得到以下编译器错误:

node_modules/rxjs/Subject.d.ts(16,22): error TS2415: Class 'Subject<T>' incorrectly extends base class 'Observable<T>'.
  Types of property 'lift' are incompatible.
    Type '<R>(operator: Operator<T, R>) => Observable<T>' is not assignable to type '<R>(operator: Operator<T, R>) => Observable<R>'.
      Type 'Observable<T>' is not assignable to type 'Observable<R>'.
         Type 'T' is not assignable to type 'R'.
Run Code Online (Sandbox Code Playgroud)

这里发生了什么,如何在不降级到TypeScript 2.3或更早版本的情况下解决这个问题?

Dan*_*ser 120

RxJS 5.4.2现在应该与TypeScript 2.4.1完美配合.如果可能,只需升级到5.4.2+.

npm install --save rxjs@^5.4.2
Run Code Online (Sandbox Code Playgroud)

如果没有,下面的解决方案应该工作.

替代方案

较新版本的RxJS将修复此问题,但作为临时解决方法,您可以使用Subject<T>编译器选项.

Observable,把它放入noStrictGenericChecks并设置为tsconfig.json.

<R>(operator: Operator<T, R>) => Observable<R>
Run Code Online (Sandbox Code Playgroud)

它在命令行上"compilerOptions".

为什么会这样

TypeScript 2.4具有严格的更改,并true没有提升到正确的位置--noStrictGenericChecks.签名真的应该是

{
    "compilerOptions": {
        "noStrictGenericChecks": true
    }
}
Run Code Online (Sandbox Code Playgroud)

这将在RxJS 6中修复.

  • `tsconfig.json`中的`compilerOptions`.只需删除破折号并将其设置为"true"即可. (2认同)

Kar*_*lai 14

今天,面对这个错误并通过以下三个步骤解决了这个问题.所以与希望分享同样的东西,这将有助于其他人.

步骤1:在package.json文件中将条目更改为"rxjs":"5.4.2",

步骤2:从项目中删除node_modules文件夹,该文件夹存在于根目录中

第3步:现在,右键单击package.json文件,然后单击还原,如下所示: 在此输入图像描述

注意:它将再次创建带有新文件的node_module文件夹,现在构建解决方案,希望您不应该得到与上述问题相关的任何构建错误.


sha*_*kla 12

"noStrictGenericChecks": true
Run Code Online (Sandbox Code Playgroud)

在tsconfig.json文件中


Kri*_*hna 7

我在package.json文件中进行了以下两个更改.

1)在依赖项部分中将rxjs版本更改为5.4.1.

"依赖":{
"rxjs":"5.4.1"}

2)在devDependencies部分将typescript版本更改为2.4.0.

"devDependencies":{"typescript":"2.4.0"}

在进行了两次更改之后我运行了' npm install '命令并且它运行了.