Angular 2 rxjs switchmap返回Observable <object>

时间:2016-08-11 13:48:32

标签: angular typescript rxjs

我正在构建一个typescript angular 2 app并使用rxjs。我在这里关注这个例子:

https://angular.io/docs/ts/latest/tutorial/toh-pt6.html#!#stq=formgroup&stp=1

尽管我试图用打字稿强烈输入我的回复签名。这可能是我的问题,因为你不应该这样做。但看起来你应该能够。

假设我有输入的服务以返回Observable&gt;。

 public search(term: string) : Observable<Array<MyModel>> { // http call }

在我的组件中,我试图听取这个可观察的流并返回结果。

 private search = new Subject<Search>();
 results: Observable<Array<MyModel>>;

 ngOnInit() {
     this.results = this.search
        .debounceTime(400)
        .distinctUntilChanged()
        .switchMap(search => {
            return service.search(search.term); // returns Observable<Array<MyModel>>
        });
  }

这不会使用消息Cannot convert type Observable<Object> to type Observable<MyModel[]>>

进行编译

我不明白为什么switchmap会返回一个Observable而不是我的类型。在将其提供给结果之前,是否需要再次映射?这是一个打字稿输入问题与switchmap的返回签名?

2 个答案:

答案 0 :(得分:1)

Typescript可能有错误的类型推断,我会尝试以下之一:

给你的处理程序一个返回类型:

.switchMap((search): Observable<Array<MyModel>> => {
        return service.search(search.term); // returns Observable<Array<MyModel>>
    });

如果这不起作用,则“妥协”将结果变量的类型更改为:

 results: Observable<any>;

答案 1 :(得分:0)

错误消息实际上是正确的。但是,在没有堆栈跟踪的情况下,不清楚哪条线导致错误。

在您调用的ngOnInit()方法中:

this.results = this.search
    .debounceTime(..)
    ...

此运算符链始终返回Observable,而不是result属性所期望的Observable<Array<MyModel>>),因为Subject的泛型是Search

运营商switchmap()始终返回Observable。它的返回类型与callable无关。

你应该能够通过简单地对结果进行类型转换来解决这个问题:

this.results = Observable<MyModel[]>this.search
    .debounceTime(..)
    ...