Angular 2 rxjs switchmap 返回 Observable<Object>

标签 angular typescript rxjs

我正在构建一个 typescript angular 2 应用程序并使用 rxjs。我在这里遵循示例:

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

虽然我正在尝试使用 typescript 强类型化我的返回签名。这可能是我的问题,因为你不应该这样做。但看起来你应该能够。

假设我有一个类型为返回 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 返回签名的 typescript 打字问题吗?

最佳答案

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

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

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

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

 results: Observable<any>;

关于Angular 2 rxjs switchmap 返回 Observable<Object>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38898255/

相关文章:

javascript - 如何禁用 Angular Material Stepper 中的步骤?

reactjs - typescript React/Redux : Argument of type 'typeof MyClass' is not assignable to parameter of type 'ComponentType<...'

rxjs - 如何测试无法完成的内部 Observable?

Angular 8 Intercept 调用刷新 token

cookies - angular2,带有凭据的http。无法添加 cookie

angular - 使用 ng2-Uploader (Angular2) & .net core 上传文件

angular - 如何在 Angular 6 动画中使用输入参数?

angular - 如何覆盖 angular-material2 样式?

Angular 与 TypeScript : ReferenceError: System is not defined System. 配置

javascript - RxJs:如何使用 flatMap 实现 HTTP 删除