2017-09-29 30 views
0

使用流动型与终极版一起,我有一个类型是这样的:允许局部型

export type MapState = { 
    addresses: Address[], 
    selected: Array<number> 
} 

和动作创作者:

export const setParams = (params: any): Action => { 
    return { type: actionTypes.SET_PARAMS, payload: { params }; 

} 

在减速机,我合并PARAMS进入状态:

export default (state: MapState = initialState, action: SetParamsAction) => { 
    switch (action.type) { 
    case actionTypes.SET_PARAMS: { 
     return { 
     ...state, 
     ...action.payload.params 
     } 
[...] 

我正在寻找一个可能性告诉流动型接受params在行动的创建者,如果它是仅由MapState的属性组成的对象,以便我可以摆脱setParams中的any。任何想法?

回答

1

你可以只添加一个exact PossibleParams Object type像这样:

type PossibleParams = {| 
    addresses?: Address[], 
    selected?: number[], 
|}; 

export const setParams = (params: PossibleParams): Action => ({ 
    type: actionTypes.SET_PARAMS, 
    payload: { 
    params, 
    }, 
}); 

您可以检查flow.org/try

+0

感谢你的贡献一切准备!是的,我意识到这种可能性,但我宁愿不使用可选属性重复该类型。 – schneck

+0

@schneck一个确切的对象类型是100%确定参数只能是指定参数而没有其他参数的唯一方法。由于所有参数都是可选的,因此您需要使其成为可选的确切对象类型。没有其他办法可以让流程检查参数。 – MichaelDeBoey