typescript - 类型 'connect' 上不存在属性 'Observable<any>' | RXJS多播

标签 typescript rxjs multicast subject

我有一个 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/

相关文章:

c++ - 如何在 Linux 上使用 C/C++ 中的 ipv6 udp 套接字进行多播?

javascript - Internet Explorer 11 计算时区错误

angular - 在Angular服务中频繁使用BehaviorSubject是一个危险信号吗?

promise - 将 Promise 流转换为值流

sockets - ZMQ 性能与 UDP 多播比较

python - 为什么在同一端口上但来自不同组的多播消息会合并在一起?

reactjs - JSX 元素类型 'ReactElement<any> | null' 不是 JSX 元素的构造函数

javascript - 尝试将 Aurealia-Authentication 添加到 sculpture-typescript 模板

javascript - RXJS Observable 数组的简单过滤器

javascript - 为什么 first() rxjs 运算符不断返回数组