首页 文章

Angular 2 rxjs switchmap返回Observable <Object>

提问于
浏览
4

我正在构建一个typescript angular 2应用程序并使用rxjs . 我在这里关注这个例子:

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

虽然我试图用打字稿强力键入我的返回签名 . 这可能是我的问题,因为你不应该这样做 . 但似乎你应该能够 .

假设我有一个输入的服务来返回一个Observable> .

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 回答

  • 1

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

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

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

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

    results: Observable<any>;
    
  • 0

    错误消息实际上是正确的 . 但是,如果没有堆栈跟踪,则不清楚哪条线导致错误 .

    ngOnInit() 方法中,您调用:

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

    这个运算符链总是返回一个 Observable ,它不是 result 属性所期望的( Observable<Array<MyModel>> ),因为 Subject 的泛型是 Search .

    运算符 switchmap() 始终返回 Observable . 它的返回类型与callable无关 .

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

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

相关问题