When I compile, I get the following compiler error in the RxJS declaration files:
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'.
What's going on here, and how do I get around this without downgrading to TypeScript 2.3 or earlier?
RxJS 5.4.2 should now work perfectly with TypeScript 2.4.1. Simply upgrade to 5.4.2+ if possible.
npm install --save rxjs@^5.4.2
Then try restarting your editor and/or recompile if you don't see an immediate change.
If not, the below solution should work.
TypeScript 2.4 has a strictness change, and Subject<T>
isn't lifting to the correct Observable
. The signature really should have been
<R>(operator: Operator<T, R>) => Observable<R>
This will be fixed in RxJS 6.
Newer versions of RxJS will have this fixed, but as a temporary workaround, you can use the noStrictGenericChecks
compiler option.
In tsconfig.json
, put it in "compilerOptions"
and set it to true
.
{ "compilerOptions": { "noStrictGenericChecks": true } }
On the command line it's --noStrictGenericChecks
.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With