FlowType - 重复复杂对象的声明

时间:2017-04-15 16:44:22

标签: javascript flowtype variable-types

请原谅新手问题,我正在努力理解/将flowType集成到我的react / redux项目中。

我的问题是,当我们声明包含已声明(其他)属性的属性时,我们是否必须重复(使用声明类型)?

详细说明,我有高阶函数,它通过道具进行过滤,以便使用相关参数调用相关的action-creator函数。这是一个HO函数,它将4个对象作为参数。

只关注第一个:envProps。其代码如下:

type envProps = {
    eCCurSelectedEle : string,
    renderTab : string,
    target : {
        pos : string,
        // collection is an object containing dynamically
        // inserted template objects with sub-objects. How would
        // I handle this? Do I have to break-down each object
        // property in this 'collection' & declare its inner
        // prop types and so on?
        collection : Object
    },
    targetPos : {
        h : number,
        w : number,
        pageX : number,
        pageY : number
    },
    toolbarCtrl : string
};

// just focusing on the first prop: envProps
export const svgMouseDownHandler = ( envProps : envProps,
                                                svgProps,
                                                target,
                                                prevSelectedTarget ) => {
...

我是否必须在每个参数中声明每个属性类型,即使该属性已在其他地方声明? 我该如何处理动态对象?

谢谢,

1 个答案:

答案 0 :(得分:2)

您可以像这样拆分每种类型,然后根据需要单独使用它。

type Target = {                                                                  
  pos: string,                                                                   
  // collection is an object containing dynamically                              
  // inserted template objects with sub-objects. How would                       
  // I handle this? Do I have to break-down each object                          
  // property in this 'collection' & declare its inner                           
  // prop types and so on?                                                       
  collection: Object                                                             
};                                                                               

type TargetPos = {                                                               
  h: number,                                                                     
  w: number,                                                                     
  pagex: number,                                                                 
  pageY: number                                                                  
};                                                                               

type envProps = {                                                                
  eCCurSelectedEle: string,                                                      
  renderTab: string,                                                             
  target: Target,                                                                
  targetPos: TargetPos,                                                          
  toolbarCtrl: string                                                            
};

对于动态对象,Flow可以理解一些动态模式,但你提出的要求非常广泛。我认为最好通过一个具体的例子发布一个单独的问题。