2016-04-08 5 views

答えて

5

Flowでは、基本的に、() => list.lengthが実行された時点で型の細分化(nullチェック)が保持されることはわかりません。そのコールバックフローの中では、リストの型だけが見えます。つまり、nullになる可能性があります。

最初のスニペットと2番目のスニペットの違いは、2番目のスニペットでlistが関数境界を超えていることです。これは、そのタイプを洗練された場所とは異なる機能で使用しています。

解決策の1つは、list.lengthを変数に抽出し、その変数をコールバックで使用することです。

var length = list.length; 
return Promise.resolve().then(() => length) 

また、これはうまくいくかもしれない:

var list2: Array<string> = list; 
return Promise.resolve().then(() => list2.length) 

例えば、この問題もすぐに呼び出されたコールバックのために存在することに注意してください、 mapまたはforEachを使用する場合。これについての流れのgithubに問題がありますが、私は迅速な検索の後でそれを見つけることができませんでした。

+0

ありがとうNikita!ここでの警告セクションでは、これについて詳しく説明しています。http://flowtype.org/docs/dynamic-type-tests.html#caveats – sorenbs

関連する問題