gpt4 book ai didi

angular - 将 Observable.forkJoin 的结果转换为 Angular 2 中的相应类型

转载 作者:太空狗 更新时间:2023-10-29 17:00:51 24 4
gpt4 key购买 nike

假设我在 Angular 2 中有一个组件,它需要在显示页面之前从服务器加载 2 个不同的东西。我希望所有这些事情都触发并在它们返回告诉页面 isLoaded = true 时调用一个事件处理程序。假设我有一个如下所示的服务类。

export class MyService {
getStronglyTypedData1(): Observable<StrongData1[]>{
return this.http.get('http://...').map((response:Response) => <StrongData1[]>response.json());
}
getStronglyTypedData2(): Observable<StrongData2[]>{
return this.http.get('http://...').map((response:Response) => <StrongData2[]>response.json());
}
}

然后我有一个像这样使用该服务类的组件。

export class MyComponent implements OnInit {
isLoaded = false;
stronglyTypedData1: StrongData1[];
stronglyTypedData2: StrongData2[];

constructor(private myService:MyService){ }

ngOnInit(){
var requests [
this.myService.getStronglyTypedData1(),
this.myService.getStronglyTypedData2()
];
Observable.forkJoin(requests).subscribe(
results => {
this.stronglyTypedData1 = results[0];
this.stronglyTypedData2 = results[1];
this.isLoaded = true;
});
}
}

TypeScript 编译器提示它无法将类型对象转换为类型 StrongData1[]。如果我将 StrongData1 和 StrongData2 更改为“any”,一切正常。不过,我宁愿不这样做,因为我正在失去 TypeScript 强类型的好处。

如何将 forkJoin 的结果转换为各自的类型?

最佳答案

对我来说,当我将请求直接添加到 Observable.forkJoin 然后使用 es6 解构结果数组时,它总是有效。

所以你的代码看起来像这样

Observable
.forkJoin(this.myService.getStronglyTypedData1(), this.myService.getStronglyTypedData2())
.subscribe(
([typeData1, typeData2]) => {
this.stronglyTypedData1 = typeData1;
this.stronglyTypedData2 = typeData2;
this.isLoaded = true;
}
);

关于angular - 将 Observable.forkJoin 的结果转换为 Angular 2 中的相应类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45306324/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com