【发布时间】:2020-05-15 22:09:29
【问题描述】:
我已经升级了我的 Angular 应用程序并且 tslint 给出了以下错误:
create 已弃用:改用 new Observable()
它抱怨的代码:
this.subs$ = Observable.create((observer: any) => {
observer.next(this.edited.code);
}).pipe(
debounceTime(defaultInputDebounceTime),
mergeMap((searchTerm: string) => this.getStrings(searchTerm))
);
我曾尝试使用new Observable() 表单,但它遇到了 debounceTime 问题。我在这里错过了什么?
this.subs$ = new Observable((observer: any) => {
observer.next(this.edited.code);
}).pipe(
debounceTime(defaultInputDebounceTime), // <- gives error
mergeMap((searchTerm: string) => this.getStrings(searchTerm))
);
错误 TS2345 (TS) 类型“MonoTypeOperatorFunction”的参数不可分配给 键入“操作员功能”。 类型“Observable”不可分配给类型“Observable”。 类型“未知”不能分配给类型“字符串”。
rxjs 6.5.2
更新
在用of() 替换Observable.create() 后,它仍然抱怨不兼容的类型:
TS2345 (TS) 类型“MonoTypeOperatorFunction”的参数不可分配给类型参数 '操作员功能'。类型 'Observable' 不可分配给类型 “可观察”。 键入'字符串 | undefined' 不能分配给类型 'string'。 类型“未定义”不可分配给类型“字符串”。
我的变量的类型是:
this.edited.code: string | undefined;
subs$: Observable<ListData[]> | undefined;
【问题讨论】:
-
他们已经更新了 api,尝试使用 of 操作符而不是 new Observable。 learnrxjs.io/learn-rxjs/operators/creation/of
-
of不能替代new Observable,这是合法的。 -
@maxime1992 有点像,如果创建中唯一的东西是
.next,或者我错过了什么 -
在这种情况下,
of是他尝试将值包装到可观察对象中的方式,他不需要保持流打开或进行任何类型的 清理。但是,如果您想将 Web 套接字包装到 ex 的 observable 中怎么办?然后您使用new Observable,因为您可以管理值、错误和拆卸(取消订阅流时,停止 ws for ex)。所以不,of绝对不是new Observable的替代品......但在这种情况下就足够了:) -
@maxime1992 对 :) 这就是我的意思,但你的评论绝对属于这里!
标签: angular typescript rxjs