Rxjs 类型"可观察"不可<Unknown>分配给"可观察"<void>



我正在从 5 升级到 rxjs v6,我也将我的打字稿版本从 2.9.2 升级到 3.7.4。在我的一个 angularjs 组件中,我调用了一个返回承诺的服务。为了便于使用,我使用 from rxjs 函数将其转换为组件中的可观察量。我的代码看起来像这样(名称从原始名称更改(。

saveObject(name: string): Observable<void> {
return from(
this.myService.saveMyObject(name)
.then(() => {
//Show Save success on ui
return;
}),
)
.pipe(
catchError((error) => {
// error handling logic
return of(); // this bit was an attempt to fix the problem
}),
);
}

我遇到的问题是组件中的 saveObject 函数返回一个可观察的 void,承诺最终解析为 void,但是当我尝试返回可观察量时,我收到一个错误,说可观察<未知>不可分配给可观察。为什么 typescript/rxjs 推断类型未知,除了进行类型断言以获得正确的类型之外,我还能做些什么。

编辑:完全删除管道并不能解决问题,仅 from(promise( 就足以出现错误,不幸的是,即使这样做告诉 rxjs 这是 void 的承诺也无济于事,它仍然提供相同的错误。

from<Promise<void>>(//promiseCode)

尝试返回of()以完成可观察量,看看它是否有效。

from(this.myService.saveMyObject(name))
.pipe(
mergeMap(()=>of()),
catchError((error) => {
// error handling logic
return of(); // this bit was an attempt to fix the problem
}),
);

这是因为 catchError(( 运算符要求您返回一个可观察量。如文档中所述,catchError((

Gracefully handle errors in an observable sequence.

并且您需要返回一个可观察量。

:warning: Remember to return an observable from the catchError function!

如果您不想返回可观察量,则使用 catchError 运算符的替代方法是在订阅可观察量时处理错误回调上的错误。

saveObject(name: string): Observable<void> {
return from(
this.myService.saveMyObject(name)
.then(() => {
//Show Save success on ui
return;
}),
)
}
this.saveObject.subscribe((res) => {
// handle success
}, (error) => { 
// handle errors, without the need to return an observable
});

在 rxjs 团队某人的帮助下,我发现这是因为我需要在我的 tsconfig 文件中包含此选项。


"lib": ["es2015"],

最新更新