NgRX效果 - 类型“Observable<unknown>”无法赋值给类型“Observable<Action>”。

69
在使用NgRX 8时,我和我的同事们经常会遇到一个奇怪的错误消息,当我们实现效果时会出现这个错误消息。
“类型'Observable '不可分配给类型'Observable | ((...args: any[]) => Observable )'”
这与类型问题有关。令人讨厌的是,这个消息非常不具体,而且标记了整个效果。这种情况经常发生,很难解决。

enter image description here

我们想知道是否有办法快速识别问题,或者我们能否以某种方式解构消息。 我这里不是在寻找特定的解决方案,而是更多地寻求“如何快速确定问题”的程序。
谢谢!
可能性的收集
这是我们迄今为止所做的以及来自评论和答案的想法。
  • 在大多数情况下,问题可能不在于操作
  • 可能是switchMap参数的错误解构
  • 其中一个 RxJS 操作符未被导入
  • 服务中的错误参数和返回值也可能是原因
  • 服务和操作之间不一致的类型也可能是原因
  • 如果没有帮助,并且您确定没有问题:重新加载 TypeScript
我们仍然希望有技巧可以分解错误消息。

什么是 addComment - Yanis-git
解决此问题并不重要,重要的是获得一种通用方法以处理此错误。 addCommentcreateAction 方法的返回值,可能不是问题所在。 而 failedsuccess 方法是由 createAction 生成的操作。 在这里,failed 不是问题,尽管我没有将其作为函数执行。 - Felix Lemke
1
我在本地重新创建了它,没有出现任何错误。你检查一下你的编辑器工作区是否使用了项目的 TypeScript 版本了吗?有时候 VSCode 会开始使用全局安装的 TS 版本。 - cyr_x
在ofType参数中,你需要将其作为${your action}.type传递,如果该操作是通过createAction创建的。 - KiraAG
此外,“重新加载 TypeScript 项目”命令或编辑器重启有时会有所帮助,特别是当打开大型项目很长时间时。但我猜这不是问题的原因。 - cyr_x
显示剩余4条评论
12个回答

-1

我在我的项目中遇到了这个错误,通过添加以下导入语句解决了它:

import { Observable, of as observableOf, of } from 'rxjs';

-1

我也见过类似的错误。

Type 'Observable<unknown>' is not assignable to type 'Observable<Action> | ((...args: any[]) => Observable<Action>)'

我最快速地确定可能发生的问题是在|分隔符之后。类型通常为Observable<{something}>Observable<{something | another}>。有一个|分隔符,第二个项目不是Observable。这可能是问题所在。

例如,如果可观察对象期望具有Observable<Action>,但某些管道运算符返回的内容与Observable<Action>不同,则意外类型将附加到错误消息中的预期类型中,因为对于Observable,T不存在于((...args: any[]) => Observable<Action>)中。

我的理解是

对象的内部类型未知,因为我们不知道要期望哪种类型Observable<Action>= Action((...args: any[]) => Observable<Action>)= unknown

如果问题不是立即明显的,我只需逐个注释每个管道运算符,看看错误是否消失。如果是,现在我知道这个运算符是问题所在,然后我会专注于运算符并找到问题。

我很感兴趣阅读其他用户的回复。这两种方式总是指引我朝着正确的方向。


嗨@mr.vea,谢谢你的回答 :) 我今天会去看一下。 - Felix Lemke

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接