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