此代码在 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/