返回函数的导出类型函数不应要求输入返回的函数以在其他模块中工作

时间:2017-01-21 21:07:51

标签: flowtype

例如,如果您正在使用redux-actions并为其创建了以下模块定义:

declare module 'redux-actions' {
  declare type ActionType = string

  declare type Action = {
    type: ActionType,
    payload?: any,
    error?: bool,
    meta?: any,
  }

  declare function createAction<T>(
    type: string,
    payloadCreator?: (...args: Array<T>) => any,
    metaCreator?: Function
  ): (...args: Array<T>) => Action
}

然后你使用该函数返回一个这样的新函数:

export const selectProfileTab = createAction('SELECT_PROFILE_TAB', (index: number) => {
  playSound()
  return { index }
})

然后在另一个文件中使用它错误:

selectorProfileTab('someString')

不会报告错误。这似乎是因为流程需要在模块的“边界”进行注释。我是对的吗?

因为以下方法有效:

export const selectProfileTab: (index: number) => any = createAction('SELECT_PROFILE_TAB', (index: number) => {
  playSound()
  return { index }
})

注意我已经注释了返回的函数。以下将产生错误:

selectProfileTab('someString')

我只是试图抓住这个并验证这一点,因为它是一个额外的“样板”来注释那些返回的函数,特别是当它调用selectProfileTab('someString')会正确产生错误时如果在同一个文件。它让你想到:为redux-actions包创建模块定义有什么意义,如果它没有提供任何/多值,那么它还没有它们,因为你必须注释你返回的函数。那令人非常失望。我是否正确确定它是Flow的模块“边界”限制/要求?有没有办法获得所需的结果,而不必输入您导出的返回函数?

0 个答案:

没有答案