reactでHOCをしつつreact-reduxでconnectするようなコードを書いています。
以下のようなコードサンプルを書いたときに(state等の定義、import は省略しています)、最後の行 createCountableComponent(Component)
の部分がconnectの引数の型とうまく合わずに型エラーになってしまいます。
typescript
1export type CountableProps = StateType & DispatchType 2 3type StateType = ReturnType<typeof mapStateToProps> 4const mapStateToProps = (state: AppState) => ({ 5 count: state.home.count 6}) 7 8type DispatchType = ReturnType<typeof mapDispatchToProps> 9const mapDispatchToProps = (dispatch: Dispatch) => ({ 10 increment: () => dispatch(increment()), 11 decrement: () => dispatch(decrement()) 12}) 13 14const createCountableComponent = 15 <P extends CountableProps>(Component: React.ComponentType<P>) => 16 class ConfigurableComponent extends React.Component<P> { 17 componentDidMount() { 18 // do something 19 } 20 21 render() { 22 return <Component {...this.props} /> 23 } 24 } 25 26export const countable = <P extends CountableProps>(Component: React.ComponentType<P>) => 27 connect( 28 mapStateToProps, 29 mapDispatchToProps 30 )(createCountableComponent(Component))
connect()
の型定義が InferableComponentEnhancerWithProps
で componentの型が C extends ComponentType<Matching<TInjectedProps, GetProps<C>>>
であるようにすればいいのですが、この部分の定義がうまく理解できません。
どのように型を指定すればいいのでしょうか。
あなたの回答
tips
プレビュー