我有一个 Observable 可以产生单播值(对所有观察者都是单独的)。但是当我要使用 RxJs 多播运算符转换为多播时,它会返回以下错误。
Property 'connect' does not exist on type 'Observable'
单播(工作代码)-
let source4$ = interval(1000).pipe(take(4));
source4$.subscribe(val => {
console.log(`Observer 1: ${val}`);
});
setTimeout(function() {
source4$.subscribe(val => {
console.log(`Observer 2: ${val}`);
});
}, 1000);
setTimeout(function() {
source4$.subscribe(val => {
console.log(`Observer 3: ${val}`);
});
}, 2000);
多播(不工作代码)-
let source4$ = interval(1000).pipe(take(4), multicast(new Subject()));
source4$.subscribe(val => {
console.log(`Observer 1: ${val}`);
});
setTimeout(function() {
source4$.subscribe(val => {
console.log(`Observer 2: ${val}`);
});
}, 1000);
setTimeout(function() {
source4$.subscribe(val => {
console.log(`Observer 3: ${val}`);
});
}, 2000);
source4$.connect();
最佳答案
你在这里实际上是正确的。 multicast
运算符实际上返回 ConnectableObservable
( https://github.com/ReactiveX/rxjs/blob/master/src/internal/operators/multicast.ts#L54 ) 的实例。
这只是 TypeScript 类型的一个问题,其中 pipe()
总是只返回 Observable
:( https://github.com/ReactiveX/rxjs/blob/master/src/internal/Observable.ts#L301-L311 )。
这已被报告,并且在 RxJS 的 GitHub 页面中有一个 Unresolved 问题:https://github.com/ReactiveX/rxjs/issues/2972
最简单的解决方法是强制覆盖返回的 Observable
:
const source4$ = interval(1000).pipe(...) as ConnectableObservable<number>
关于typescript - 类型 'connect' 上不存在属性 'Observable<any>' | RXJS多播,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54265143/