Redux 使用流联合类型进行重复操作
按照同时使用Redux和Flow的风格,我以这种方式创建了一个动作类型:Redux 使用流联合类型进行重复操作,redux,flowtype,Redux,Flowtype,按照同时使用Redux和Flow的风格,我以这种方式创建了一个动作类型: type Action = | { type: 'ADD_FILES', files: Array<{ id: number, file: File }> } | { type: 'HANDLE_IMAGE_PUBLISHED', id: number, name: string } | { type: 'SET_IMAGE_UPLOAD_PROGRESS', id: number, progres
type Action =
| { type: 'ADD_FILES', files: Array<{ id: number, file: File }> }
| { type: 'HANDLE_IMAGE_PUBLISHED', id: number, name: string }
| { type: 'SET_IMAGE_UPLOAD_PROGRESS', id: number, progress: number }
;
类型动作=
|{type:'ADD_FILES',FILES:Array}
|{type:'HANDLE_IMAGE_PUBLISHED',id:number,name:string}
|{type:'SET_IMAGE_UPLOAD_PROGRESS',id:number,PROGRESS:number}
;
但我发现,当我尝试使用减缩器处理我的操作时,如果我尝试访问名称
或进度
属性,并说“在对象类型中找不到属性”,则流会抱怨
也就是说,在我的reducer中,如果我检查action.type===“HANDLE\u IMAGE\u PUBLISHED”
,然后访问action.name
,流就会抱怨。当action.type=='SET\u IMAGE\u UPLOAD\u progress'
时,访问action.progress
属性也是一样的。据我所知,这两种财产访问在各自的情况下都应该是合法的,但流量会引起投诉
但是出于某种原因,我可以在任何地方访问action.id
,即使我的联合中的某个类型没有指定id
属性。我很困惑
。我做错了什么?这只是类型细化失效的一个例子: 因为您正在回调中使用该值,所以Flow悲观地假设您可以在回调运行之前重新分配
操作
(它不知道是否立即调用映射
回调)。它也不会进行分析,以确定实际上没有位置可以重新分配它
只需将操作作为常量拉出即可:
export default (state: Array<ImageRecordModel> = [], action_: Action): Array<ImageRecordModel> => {
const action = action_;
[options]
experimental.const_params=true
我明白了,谢谢你的解释。我想使用实验性的.const_params=true
是有意义的,因为我也在使用ESLint的无参数重新分配
规则。