Машинопись HO C с redux connect - PullRequest
0 голосов
/ 19 июня 2020

Я пытаюсь создать HO C с redux 'connect, обертывающим какой-то другой компонент. Однако я не могу правильно понять аргументы connect generi c. Другие руководства по этому топи c, которые я обнаружил, либо едва поцарапали поверхность, либо пролетают над моей головой. Буду признателен за помощь в этом. Это мой код на данный момент:

import React, { ReactElement } from 'react'
import {StoreState} from '../reducers'
import {connect} from 'react-redux'

interface Props{
  auth: boolean
}

interface OwnProps {

}

export default (ChildComponent: React.ComponentType): React.ComponentType<typeof ChildComponent>=> {
  class ComposedComponent extends React.Component<Props> {

  componentDidMount(): void{
    this.shouldNavigateAway()
  }

  componentDidUpdate(): void {
    this.shouldNavigateAway()
  }

  shouldNavigateAway = (): void => {
    if (!this.props.auth) {
      //do something
    }
  }

    render(): ReactElement {
      return <ChildComponent {...this.props} />
    }
  }

  const mapStateToProps = ({
    auth,
  }: StoreState): {auth: boolean} => {
    return { auth }
  }

  return connect<Props, {}, OwnProps>(mapStateToProps)(ComposedComponent)
}

Ошибка, которую я получаю, находится исключительно в 'mapStateToProps' в моем операторе возврата в самом конце, и в нем говорится:

const mapStateToProps: ({ auth, }: StoreState) => {
    auth: boolean;
}
Argument of type '({ auth, }: StoreState) => { auth: boolean; }' is not assignable to parameter of type 'MapStateToPropsParam<Props, OwnProps, DefaultRootState>'.
  Type '({ auth, }: StoreState) => { auth: boolean; }' is not assignable to type 'MapStateToPropsFactory<Props, OwnProps, DefaultRootState>'.
    Types of parameters '__0' and 'initialState' are incompatible.
      Type 'DefaultRootState' is missing the following properties from type 'StoreState': comments, authts(2345)

My Интерфейс StoreState выглядит следующим образом:

export interface StoreState {
  comments: Comment[]
  auth: boolean
}

Однако я чувствую, что мне нужен его возвращаемый тип таким, какой он есть. Я уже пробовал опустить часть комментариев в моем состоянии, поскольку HO C отвечает только за свойство auth, но в этом случае ошибка все равно будет жаловаться на отсутствие auth. Типа застрял здесь и не уверен, куда TS пытается меня указать.

1 Ответ

0 голосов
/ 19 июня 2020

Согласно странице руководства по использованию React-Redux на «Stati c Typing» , вам не следует пытаться напрямую объявлять дженерики в connect. Фактически, мы специально рекомендуем использовать технику ConnectedProps<T> , описанную на этой странице, чтобы автоматически определить тип всех свойств, передаваемых из connect в ваш собственный компонент.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...