使用TypeScript 2.4.1在@ ngrx / effects中观察动作时出错

时间:2017-07-06 02:21:54

标签: typescript ngrx

更新到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'.

如何解决这个问题?

1 个答案:

答案 0 :(得分:11)

TypeScript 2.4.1更严格地强制执行liftObservable方法的通用签名,而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

的发布解决