Angular 7升级: RxJs switchMap and return type of ObservableInput<void>

标签 angular rxjs angular7

此代码在 Angular 6 中编译并运行:

import { of } from 'rxjs';
import { switchMap } from 'rxjs/operators';

switchMap((term) => {
                if (term.trim().length > 3)
                    return this.searchEntries(term); // <- returns  Observable<void> 

                return of([]);
            })

升级到 Angular 7 后,我收到此编译时错误:

[ts]
Argument of type '(term: any) => Observable<void> | Observable<any[]>' is not assignable to parameter of type '(value: any, index: number) => ObservableInput<void>'.
  Type 'Observable<void> | Observable<any[]>' is not assignable to type 'ObservableInput<void>'.
    Type 'Observable<any[]>' is not assignable to type 'ObservableInput<void>'.
      Type 'Observable<any[]>' is not assignable to type 'Iterable<void>'.
        Property '[Symbol.iterator]' is missing in type 'Observable<any[]>'.

Angular 版本:

$ ng version

Angular CLI: 7.0.2
Node: 10.12.0
OS: linux x64
Angular: 7.0.0
... animations, cdk, common, compiler, compiler-cli, core, forms
... http, language-service, platform-browser
... platform-browser-dynamic, router

Package                           Version
-----------------------------------------------------------
@angular-devkit/architect         0.10.2
@angular-devkit/build-angular     0.10.2
@angular-devkit/build-optimizer   0.10.2
@angular-devkit/build-webpack     0.10.2
@angular-devkit/core              7.0.2
@angular-devkit/schematics        7.0.2
@angular/cli                      7.0.2
@ngtools/webpack                  7.0.2
@schematics/angular               7.0.2
@schematics/update                0.10.2
rxjs                              6.3.3
typescript                        3.1.3
webpack                           4.19.1

看起来我必须为 switchMap 返回 ObservableInput,但是如何?

感谢任何帮助。

最佳答案

感谢@cartant,我通过添加返回类型解决了编译时错误,如下所示:

switchMap((term) : Observable<void | any[]> => {
                if (term.trim().length > 3)
                    return this.searchEntries(term); // <- returns  Observable<void> 

                return of([]);
            })

关于Angular 7升级: RxJs switchMap and return type of ObservableInput<void>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52915322/

相关文章:

functional-programming - 创建一个通过过滤器的连续值流

Angular 变化检测: how to refresh only certain items?

javascript - 如何正确地将 youtube iframe 嵌入到 Angular2 View 中?获取不安全值错误

angular - 如何为表组行交替应用颜色?

angular - 根据先前响应的结果顺序级联 Observables 并重新映射到新数据对象

Angular:如何在订阅模板之前通过管道传输 Observable

javascript - 如何在 ng-circle-progress imageSrc 选项中附加图像?

angular - 使用自定义名称导出文件

angular - [Angular-CLI-6]无法确定 'Serve' 目标的单个项目

javascript - 基于选择多选下拉显示和隐藏的Angular-6无法正常工作