Поток, как наследовать типовые функции класса?
Я сделал простой класс маршрутизатора, который при упрощении выглядит следующим образом
// @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
отсутствует в статикеRouterState
[1]. (Ссылки: [1]) [Flow] mutationPush: любой
Edit2: я попытался добавить экспорт типа в классе, так
export type mutationPush: (pathname: string, data?: ?Object) => void
/* ... */
mutationPush: mutationPush = (pathname, data) => ...
но везде, где я использую эту функцию, Flow Helper говорит это mutationPush: mutationPush
вместо mutationPush: (pathname: string, data?: Object) ...
1 ответ
Вы можете использовать тип утилиты $PropertyType, чтобы получить тип свойства или метода.
type Props = {
push: $PropertyType<RouterState, 'mutationPush'>
}