Поток, как наследовать типовые функции класса?

Я сделал простой класс маршрутизатора, который при упрощении выглядит следующим образом

// @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'>
}
Другие вопросы по тегам