2017-04-12 6 views
3

のためのフロー組合型を使用して一緒に流れ、私はこの方法でアクションタイプを作りました減速機で、nameまたはprogressのプロパティにアクセスしようとすると、「オブジェクトタイプにプロパティが見つかりません」というメッセージが表示されます。はReduxのを使用して<a href="https://github.com/fbsamples/f8app/blob/master/js/actions/types.js" rel="nofollow noreferrer">this Facebook app sample</a>のスタイルに続いてReduxのアクション

つまり、私の減量業者では、action.type === 'HANDLE_IMAGE_PUBLISHED'をチェックしてaction.nameにアクセスすると、フローが文句を言います。 action.type === 'SET_IMAGE_UPLOAD_PROGRESS'の場合は、action.progressプロパティにアクセスする場合も同じことが起こります。これら両方のプロパティへのアクセスは、私が知る限りそれぞれの状況下で合法でなければならないが、フローは不平を言う。

idプロパティが指定されていないにもかかわらず、なんらかの理由でaction.idにアクセスするのは問題ありません。私は非常に混乱しています。

Here is a live demo in the Flow REPL。私は間違って何をしていますか?

答えて

3

これは、単に型洗練無効の場合です:

https://flow.org/en/docs/lang/refinements/#refinement-invalidations

あなたがコールバックで値を使用しているため、フローは悲観的に(コールバックを実行する前に再割り当てされている可能性があることactionを想定していますmapコールバックがすぐに呼び出されることはわかりません)。実際には、再割り当てする場所がないことを確認するための分析も行いません。すべてのことが必要なの

constとしてactionを引き出すことです。

export default (state: Array<ImageRecordModel> = [], action_: Action): Array<ImageRecordModel> => { 
    const action = action_; 

tryflow link

あなたはまた、あなたの.flowconfigでのconstのparamsを有効にすることを検討することをお勧めします。これは基本的にあなたが期待することです:すべてのパラメータをconstとして扱います:

[options] 
experimental.const_params=true 
+0

私は説明してくれてありがとう。私はESLintの 'no-param-reassign'ルールも使っているので' experimental.const_params = true'を使うのは意味があると思います。 – callum

関連する問題

 関連する問題