映射不正确的值
我正在尝试将多个可观察物映射到一个可观察的可观察使用rxjs combineLatest
。当我试图映射6个可观测值时,这先前是在工作,但是当添加一个5时,编译器似乎对映射感到困惑。这是所讨论的逻辑:
interface ReferenceData {
observableOne: ArrOne[];
observableTwo: ArrTwo[];
observableThree: ArrThree[];
observableFour: ArrFour[];
observableFive: ArrFive[];
observableSix: ArrSix[];
observableSeven: ArrSeven[];
observableEight: ArrEight[];
observableNine: ArrNine[];
observableTen: ArrTen[];
observableEleven: ArrEleven[];
}
export class ReviewComponent extends BaseComponent implements OnInit, AfterViewInit {
observableOne$: Observable<ArrOne[]>;
observableTwo$: Observable<ArrTwo[]>;
observableThree$: Observable<ArrThree[]>;
observableFour$: Observable<ArrFour[]>;
observableFive$: Observable<ArrFive[]>;
observableSix$: Observable<ArrSix[]>;
observableSeven$: Observable<ArrSeven[]>;
observableEight$: Observable<ArrEight[]>;
observableNine$: Observable<ArrNine[]>;
observableTen$: Observable<ArrTen[]>;
observableEleven$: Observable<ArrEleven[]>;
referenceData$: Observable<ReferenceData>;
ngOnInit(): void {
this.getReferenceData();
this.createSingleReferenceDataObservable();
}
getReferenceData() {
this.observableOne$ = this.entityService.get('TestDataOne');
this.observableTwo$ = this.entityService.get('TestDataTwo');
this.observableThree$ = this.entityService.get('TestDataThree');
this.observableFour$ = this.entityService.get('TestDataFour');
this.observableFive$ = this.entityService.get('TestDataFive');
this.observableSix$ = this.entityService.get('TestDataSix');
this.observableSeven$ = this.entityService.get('TestDataSeven');
this.observableEight$ = this.entityService.get('TestDataEight');
this.observableNine$ = this.entityService.get('TestDataNine');
this.observableTen$ = this.entityService.get('TestDataTen');
this.observableEleven$ = this.entityService.get('TestDataEleven');
}
createSingleReferenceDataObservable() {
this.referenceData$ = combineLatest([
this.observableOne$,
this.observableTwo$,
this.observableThree$,
this.observableFour$,
this.observableFive$,
this.observableSix$,
this.observableSeven$,
this.observableEight$,
this.observableNine$,
this.observableTen$,
this.observableEleven$
])
.pipe(
map(([
ArrOne,
ArrTwo,
ArrThree,
ArrFour,
ArrFive,
ArrSix,
ArrSeven,
ArrEight,
ArrNine,
ArrTen,
ArrEleven
]) => {
return {
ArrOne,
ArrTwo,
ArrThree,
ArrFour,
ArrFive,
ArrSix,
ArrSeven,
ArrEight,
ArrNine,
ArrTen,
ArrEleven
}
})
);
}
}
编译器给出以下错误:
键入'可观察&lt; {arrone:arrone []; arrtwo:arrone []; arrthree: arrone []; arrfour:arrone []; arrfive:arrone []; arrsix:arrone []; arrseven:arrone []; Arreight:Arrone []; arrnine:arrone []; arrten: arrone [];到达:arrone []; }&gt;'不能分配给类型 “可观察”。键入'{arrone:arrone []; arrtwo: arrone []; arrthree:arrone []; arrfour:arrone []; arrfive:arrone []; arrsix:arrone []; arrseven:arrone []; Arreight:Arrone []; arrnine: arrone []; arrten:arrone [];到达:arrone []; }'缺少 以下来自类型为“ ReferenceData”的属性:可观察酮, observabletwo,observablethree,observablefour和7个。
这很奇怪,因为如果我将可观察值的数量减少到六个,然后从referenceedata
接口中删除相应的值,则编译器不会丢弃此错误。
有什么想法吗?
I'm trying to map multiple observables into one single observable use RXJS CombineLatest
. This was previously working when I was trying to map 6 observables but when adding an additional 5, the compiler seems to get confused about the mapping. This is the logic in question:
interface ReferenceData {
observableOne: ArrOne[];
observableTwo: ArrTwo[];
observableThree: ArrThree[];
observableFour: ArrFour[];
observableFive: ArrFive[];
observableSix: ArrSix[];
observableSeven: ArrSeven[];
observableEight: ArrEight[];
observableNine: ArrNine[];
observableTen: ArrTen[];
observableEleven: ArrEleven[];
}
export class ReviewComponent extends BaseComponent implements OnInit, AfterViewInit {
observableOne$: Observable<ArrOne[]>;
observableTwo$: Observable<ArrTwo[]>;
observableThree$: Observable<ArrThree[]>;
observableFour$: Observable<ArrFour[]>;
observableFive$: Observable<ArrFive[]>;
observableSix$: Observable<ArrSix[]>;
observableSeven$: Observable<ArrSeven[]>;
observableEight$: Observable<ArrEight[]>;
observableNine$: Observable<ArrNine[]>;
observableTen$: Observable<ArrTen[]>;
observableEleven$: Observable<ArrEleven[]>;
referenceData$: Observable<ReferenceData>;
ngOnInit(): void {
this.getReferenceData();
this.createSingleReferenceDataObservable();
}
getReferenceData() {
this.observableOne$ = this.entityService.get('TestDataOne');
this.observableTwo$ = this.entityService.get('TestDataTwo');
this.observableThree$ = this.entityService.get('TestDataThree');
this.observableFour$ = this.entityService.get('TestDataFour');
this.observableFive$ = this.entityService.get('TestDataFive');
this.observableSix$ = this.entityService.get('TestDataSix');
this.observableSeven$ = this.entityService.get('TestDataSeven');
this.observableEight$ = this.entityService.get('TestDataEight');
this.observableNine$ = this.entityService.get('TestDataNine');
this.observableTen$ = this.entityService.get('TestDataTen');
this.observableEleven$ = this.entityService.get('TestDataEleven');
}
createSingleReferenceDataObservable() {
this.referenceData$ = combineLatest([
this.observableOne$,
this.observableTwo$,
this.observableThree$,
this.observableFour$,
this.observableFive$,
this.observableSix$,
this.observableSeven$,
this.observableEight$,
this.observableNine$,
this.observableTen$,
this.observableEleven$
])
.pipe(
map(([
ArrOne,
ArrTwo,
ArrThree,
ArrFour,
ArrFive,
ArrSix,
ArrSeven,
ArrEight,
ArrNine,
ArrTen,
ArrEleven
]) => {
return {
ArrOne,
ArrTwo,
ArrThree,
ArrFour,
ArrFive,
ArrSix,
ArrSeven,
ArrEight,
ArrNine,
ArrTen,
ArrEleven
}
})
);
}
}
The compiler is giving the following error:
Type 'Observable<{ ArrOne: ArrOne[]; ArrTwo: ArrOne[]; ArrThree:
ArrOne[]; ArrFour: ArrOne[]; ArrFive: ArrOne[]; ArrSix: ArrOne[];
ArrSeven: ArrOne[]; ArrEight: ArrOne[]; ArrNine: ArrOne[]; ArrTen:
ArrOne[]; ArrEleven: ArrOne[]; }>' is not assignable to type
'Observable'. Type '{ ArrOne: ArrOne[]; ArrTwo:
ArrOne[]; ArrThree: ArrOne[]; ArrFour: ArrOne[]; ArrFive: ArrOne[];
ArrSix: ArrOne[]; ArrSeven: ArrOne[]; ArrEight: ArrOne[]; ArrNine:
ArrOne[]; ArrTen: ArrOne[]; ArrEleven: ArrOne[]; }' is missing the
following properties from type 'ReferenceData': observableOne,
observableTwo, observableThree, observableFour, and 7 more.
It's strange because if I reduce the number of observables to six and delete the corresponding values from the ReferenceData
interface, the compiler doesn't throw this error.
Any ideas?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
RXJS CombineLatest还具有另一个超载,您可以在对象中传递,这将使您也可以跳过
MAP
:也许这效果更好。它可能是一个数组不起作用,因为TS可能对可以从元组推断的值有限制。
RxJS combineLatest also has another overload where you can pass in an object, which would let you skip the
map
too:Maybe this one works better. It could be the array one doesn't work because TS might have a limit on how many values it can infer from a tuple.
您可以在错误msg的末尾找到解决方案
问题在于,在
referendedata
中,您将适当名称定义为observableOne,observableTwo,...
,但是在地图中,您正在返回一个对象,其中包含属性为
的属性。 arrone,arrtwo,...
因此,您要么更改映射函数,因此返回的属性名称与接口匹配。
的对象参数签名
或者您直接使用
combineLatest
欢呼You can find the solution an the end of the error msg
The problem is that in
ReferenceData
you have defined the properies names asobservableOne, observableTwo,...
But in the map you are returning an object with properties named as
ArrOne, ArrTwo,...
So you either change the mapping function so the returned properties names match the interface.
Or you use directly the object parameter signature of
combineLatest
Cheers