我制作了一个简单的路由器类,当简化时它看起来像这样

// @flow
import { Container } from 'unstated'

type State = {
  history: Object[],
  pathname: string,
  data: Object | null
}

class RouterState extends Container<State> {
  state = {
    history: [{ pathname: '/onboarding/sign-in', data: null }],
    pathname: '/onboarding/sign-in',
    data: null
  }


  mutationPush = (pathname: string, data?: Object | null = null) => {
    if (pathname !== this.state.pathname) {
      const history = [...this.state.history, { pathname, data }]
      this.setState({
        history,
        pathname,
        data
      })
    }
  }
}
export default RouterState


不幸的是,RouterState.mutationPush不会返回类型,因为它不是静态函数,这是由于extends Container的使用以及在我的React应用程序中的使用情况所期望的。我试图找出一种方法,可以像这样导出类中每个单独函数的类型。

编辑特定的用例为此

type Props = {
  push: RouterState.mutationPush
}


那个错误


  [流程]无法获取RouterState.mutationPush,因为在mutationPush [1]的静态变量中缺少属性RouterState
  (参考:[1])
      [流]
      突变推:任何


Edit2:我试图在类中添加类型导出

export type mutationPush: (pathname: string, data?: ?Object) => void

/* ... */

mutationPush: mutationPush = (pathname, data) => ...


但是无论我在哪里使用此功能,流程助手都会说这个mutationPush: mutationPush而不是mutationPush: (pathname: string, data?: Object) ...

最佳答案

您可以使用$PropertyType实用程序类型来获取属性或方法的类型。

type Props = {
  push: $PropertyType<RouterState, 'mutationPush'>
}

09-16 10:05