2017-07-10 7 views
2

角度4.2.4のアプリケーションでは、異種タイプを返すためにRxJSのObservable.forkJoinをいくつかの場所で使用しています。例えばObservable.forkJoin()TypeScript 2.4.1およびRxjs 5.4.2に更新した後のTS2322エラー

:以下のサービスのシグネチャを持つ

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[]> { ... } 

2.4.1を活字体にアップデートした後、tscは今this.contractListのため、次のエラーで文句を言う:

エラー./app/fleet /fleetComponent.ts(xx、xx): エラーTS2322:タイプ '航空機[]'は 'string []'タイプに割り当てられません。

Aircraft[]string[]に割り当てようとしていません。彼らはresult[0]と同じ型であるかのようにresult[]内のすべての要素が処理されます

同じことは、我々が実装のすべてObservable.forkJoin真です。

Error with Actions observable in @ngrx/effects using TypeScript 2.4.1の問題と非常によく似ていますが、"noStrictGenericChecks": true,をtsconfig.js '"compilerOptions"に追加しても問題は解決しませんでした。

どうしてですか?これをどうすれば解決できますか?

答えて

7

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 
); 
+0

ブリリアント!私はあなたが 'forkJoin()'にリストを渡すことができるかどうかも知りませんでした。これで問題は解決しました。私は 'タプル(tuple) 'の説明に感謝します。 – msanford

1

注:私はそれを取得し、利用可能とすぐにデータを返すが、forkJoinがされるまで待機しますcombineLatestとしてcombineLatestを使用する方が良いと思いますlast chainコマンドが実行されます。

関連する問題