Typescript 财产';连接';不存在于类型';可观察<;任何>';|RXJS多播

Typescript 财产';连接';不存在于类型';可观察<;任何>';|RXJS多播,typescript,rxjs,multicast,subject,Typescript,Rxjs,Multicast,Subject,我有一个产生单播值的可观测值(对所有观察者单独)。但是,当我打算使用RxJs多播操作符转换为多播时,它会返回以下错误 类型“Observable”上不存在属性“connect” 单播(工作代码)- 多播(非工作代码)—— 你说得对。multicast操作符实际上返回了ConnectableObservable()的一个实例 这只是TypeScript类型的一个问题,其中pipe()始终只返回Observable:() 这已经被报道了,RxJS的GitHub页面中有一个公开的问题: 最简单的解决方

我有一个产生单播值的可观测值(对所有观察者单独)。但是,当我打算使用RxJs多播操作符转换为多播时,它会返回以下错误

类型“Observable”上不存在属性“connect”

单播(工作代码)-

多播(非工作代码)——


你说得对。
multicast
操作符实际上返回了
ConnectableObservable
()的一个实例

这只是TypeScript类型的一个问题,其中
pipe()
始终只返回
Observable
:()

这已经被报道了,RxJS的GitHub页面中有一个公开的问题:

最简单的解决方法是强制覆盖返回的
可观察的

const source4$ = interval(1000).pipe(...) as ConnectableObservable<number>
const source4$=间隔(1000)。管道(…)作为可连接可观察

您可以通过不使用
pipe()
函数来连接操作员, 它所做的只是调用由
multicast()
返回的函数

例如:
observable.pipe(take(5))
take(5)(observable)

这种方式唯一的问题是,TypeScript将无法推断可观察对象的类型。因此,在创建主题时,您必须指定它

let source4$ = multicast(new Subject<number>())(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);

source4$.connect();
let source4$=multicast(new Subject())(interval(1000).pipe(take(4));
source4$.subscribe(val=>{
log(`Observer 1:${val}`);
});
setTimeout(函数(){
source4$.subscribe(val=>{
log(`Observer 2:${val}`);
}); 
}, 1000);
setTimeout(函数(){
source4$.subscribe(val=>{
log(`Observer 3:${val}`);
}); 
}, 2000);
source4$.connect();

我没有使用publish进行测试,但这将是另一种解决方案。以及为什么我的代码不起作用实际上它似乎起作用了:正如我看到的,您也没有使用publish。您也在使用connect。
const source4$ = interval(1000).pipe(...) as ConnectableObservable<number>
let source4$ = multicast(new Subject<number>())(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);

source4$.connect();