RxJs 管道和 lettable 运算符“map”:“void”类型的“this”上下文不可分配给“Observable<>”类型的方法“this”

Posted

技术标签:

【中文标题】RxJs 管道和 lettable 运算符“map”:“void”类型的“this”上下文不可分配给“Observable<>”类型的方法“this”【英文标题】:RxJs pipe and lettable operator `map`: 'this' context of type 'void' is not assignable to method's 'this' of type 'Observable<>'RxJs 管道和 lettable 运算符“map”:“void”类型的“this”上下文不可分配给“Observable<>”类型的方法“this” 【发布时间】:2018-04-22 06:16:48 【问题描述】:

我有一个非常基本的示例,它使用来自rxjs@5.5 的可让运算符mappipe

import  map  from 'rxjs/operator/map';

let o = of(1, 2, 3, 4).pipe(
    map((v) => v * 2)
);

但它会产生错误Error:(34, 5) TS2684:The 'this' context of type 'void' is not assignable to method's 'this' of type 'Observable&lt;&gt;'.这里有什么问题?

【问题讨论】:

【参考方案1】:

Lettable 实例操作符应该从rxjs/operators 导入:

import  map  from 'rxjs/operators';

与从rxjs/operator 导入的不可出租等价物相反:

import  map  from 'rxjs/operator/map';

要了解有关 lettable 运算符的更多信息,请阅读:

RxJS: Understanding Lettable Operators

【讨论】:

对于其他可能在谷歌上搜索的人:first 也是一个可出租的运算符 令人沮丧的是 VSCode 似乎选择从 rxjs/operator/map 自动导入。 有一些捆绑问题可能需要您对可管道操作符进行深度导入以减小捆绑大小。在这些情况下,如果您不小心从 rxjs/operator/map 而不是 rxjs/operators/map 导入,您将遇到此问题。 谢谢大家,很难发现 所有演示中必须清楚地显示导入内容 =/

以上是关于RxJs 管道和 lettable 运算符“map”:“void”类型的“this”上下文不可分配给“Observable<>”类型的方法“this”的主要内容,如果未能解决你的问题,请参考以下文章

在可管道 rxjs 运算符的组合管道中捕获错误

无法在 Angular 项目中使用 rxjs 的 map 运算符

javascript 中rxjs.map运算符

从角度服务通过管道传输时,rxjs catchError 不起作用

如何使用jasmine-marbles测试rxjs管道中的timeout()

VSCode TypeScript rxjs map() 运算符在重复足够多后会丢失类型