更新到TypeScript 2.4.1后,编译使用Actions
(版本2.0.3)中的@ngrx/effects
observable的项目会看到抛出以下错误:
Error TS2684: The 'this' context of type 'Actions' is not assignable to method's 'this' of type 'Observable<any>'.
Error TS7006: Parameter 'action' implicitly has an 'any' type.
Error TS2345: Argument of type 'Actions' is not assignable to parameter of type 'Observable<Action>'.
Types of property 'lift' are incompatible.
Type '(operator: Operator<any, Action>) => Observable<Action>' is not assignable to type '<R>(operator: Operator<Action, R>) => Observable<R>'.
Types of parameters 'operator' and 'operator' are incompatible.
Type 'Operator<Action, R>' is not assignable to type 'Operator<any, Action>'.
Type 'R' is not assignable to type 'Action'.
如何解决这个问题?
答案 0 :(得分:11)
TypeScript 2.4.1更严格地强制执行lift
中Observable
方法的通用签名,而Actions
observable的lift
实现未通过检查。
可以使用--noStrictGenericChecks
命令行标志或noStrictGenericChecks
编译器选项(作为tsconfig.json
的{{1}}对象中的参数)禁用检查。
禁用检查的替代方法是使用TypeScript的接口扩充来指定正确的签名:
"compilerOptions"
请注意,必须使用模块/文件的完整路径;将import { Action } from "@ngrx/store";
import { Observable } from "rxjs/Observable";
import { Operator } from "rxjs/Operator";
declare module "@ngrx/effects/src/actions" {
interface Actions {
lift<R>(operator: Operator<Action, R>): Observable<R>;
}
}
指定为模块名称是不够的。
此问题已通过@ngrx/effects
2.0.4。