Observable.forkJoin() 更新到 TypeScript 2.4.1 和 Rxjs 5.4.2 后出现 TS2322 错误
Observable.forkJoin() TS2322 error after updating to TypeScript 2.4.1 and Rxjs 5.4.2
在我们的 angular 4.2.4 应用程序中,我们在许多地方使用 RxJS 的 Observable.forkJoin
来 return 异构类型。
例如:
private fleet: Aircraft[];
private contractList: string[];
Observable.forkJoin([
this.fleetService.getFleet(),
this.fleetService.getContractList()
]).subscribe(
next => {
this.fleet = results[0];
this.contractList = results[1];
},
error => console.error
);
具有以下服务签名:
getFleet(): Observable<Aircraft[]> { ... }
getContractList(): Observable<string[]> { ... }
更新到 TypeScript 2.4.1 后,tsc
现在抱怨 this.contractList
的以下错误:
ERROR in ./app/fleet/fleetComponent.ts (xx,xx):
error TS2322: Type 'Aircraft[]' is not assignable to type 'string[]'.
但我并不是要将 Aircraft[]
分配给 string[]
。
对于 all 我们实现的另一个 Observable.forkJoin
也是如此:result[]
中的所有元素都被视为与 result[0]
.
看起来与中的问题非常相似,但是将"noStrictGenericChecks": true,
添加到tsconfig.js'"compilerOptions"
中并没有解决问题。
为什么会这样?我该如何解决这个问题?
您可能看到 Typescript 编译器对泛型的强制执行有所加强,副作用是 forkJoin 没有 tuple
重载。
从参数列表中删除数组符号到 forkJoin
应该可行,但是:
Observable.forkJoin(
this.fleetService.getFleet(),
this.fleetService.getContractList()
).subscribe(
next => {
this.fleet = results[0];
this.contractList = results[1];
},
error => console.error
);
注意:我认为最好使用 combineLatest
作为 combineLatest
获取和 return 数据,但 forkJoin
将等到最后一个链命令执行。
在我们的 angular 4.2.4 应用程序中,我们在许多地方使用 RxJS 的 Observable.forkJoin
来 return 异构类型。
例如:
private fleet: Aircraft[];
private contractList: string[];
Observable.forkJoin([
this.fleetService.getFleet(),
this.fleetService.getContractList()
]).subscribe(
next => {
this.fleet = results[0];
this.contractList = results[1];
},
error => console.error
);
具有以下服务签名:
getFleet(): Observable<Aircraft[]> { ... }
getContractList(): Observable<string[]> { ... }
更新到 TypeScript 2.4.1 后,tsc
现在抱怨 this.contractList
的以下错误:
ERROR in ./app/fleet/fleetComponent.ts (xx,xx): error TS2322: Type 'Aircraft[]' is not assignable to type 'string[]'.
但我并不是要将 Aircraft[]
分配给 string[]
。
对于 all 我们实现的另一个 Observable.forkJoin
也是如此:result[]
中的所有元素都被视为与 result[0]
.
看起来与"noStrictGenericChecks": true,
添加到tsconfig.js'"compilerOptions"
中并没有解决问题。
为什么会这样?我该如何解决这个问题?
您可能看到 Typescript 编译器对泛型的强制执行有所加强,副作用是 forkJoin 没有 tuple
重载。
从参数列表中删除数组符号到 forkJoin
应该可行,但是:
Observable.forkJoin(
this.fleetService.getFleet(),
this.fleetService.getContractList()
).subscribe(
next => {
this.fleet = results[0];
this.contractList = results[1];
},
error => console.error
);
注意:我认为最好使用 combineLatest
作为 combineLatest
获取和 return 数据,但 forkJoin
将等到最后一个链命令执行。