我制作了一个简单的路由器类,当简化时它看起来像这样
// @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'>
}