指示某个索引中包含某些类型的数组?

时间:2016-03-08 22:34:25

标签: rxjs5 typescript1.8

我正在使用使用RxJS Observables的Typescript Angular2站点。我正在获取一块用户数据并命中两个不同的API端点。我这样.forkJoin将它们放在一起

var First: TypeA = this.api.FirstEndpoint(...);
var Second: TypeB = this.api.SecondEndpoint(...);
Observable.forkJoin(First, Second).subscribe((results: (TypeA|TypeB)[]) => {
    var first = <TypeA>results[0];
    var second = <TypeB>results[1];
    ...
});

虽然这在技术上有效,但我觉得这有点笨拙。特别是如果我加入越来越多的请求或可变数量的请求。没有任何内容表明results[0]是TypeA或1是TypeB。

是否有更顺畅的方式来键入resultsforkJoin的替代方案,它们会合并请求但保持其响应不同(因此更明确地键入)?

1 个答案:

答案 0 :(得分:0)

您可以定义自己的选择器,编译器应该使用它来推断结果流的类型:

var combined = Observable.forkJoin(First, Second, (first, second) => {
  return { first, second };
});

combined.subscribe(result) => {
    // I don't think you'll need to explicitly cast
    var first = result.first;
    var second = result.second;
    ...
});