In case compose
is used there is an error JSX element type ‘Option’ does not have any construct or call signatures.
\'redux\' version - 3.7.2
You need to type cast the component returned by compose as React.ComponentType and it works fine. So:
compose(...)(SomeComponent) as React.ComponentType
An updated answer; use the generics for compose
:
import React, { ComponentType, FC } from 'react';
export default compose<ComponentType>(
withWidth,
connect(
mapStateToProps,
mapDispatchToProps
)
)(Search)
The problem is probably that you are wrapping your arguments to compose
in an array, and then destructuring the array using the spread operator (...
).
There is no reason to do this since it is semantically equivalent to passing the arguments directly. This construction may also prevent TypeScript from inferring the type parameters for compose
correctly.
You could rewrite your compose
call as
const Option = compose(
connect(null,
dispatch => ({
onClick: (name) => dispatch(setActive(name)),
})),
fela({
option: ({ theme }) => ({
...getControlOptionColors(theme),
}),
}),
)(withTheme(({ label, name, onClick, styles }) => (
<div className={styles.option} onClick={onClick.bind(this, name)}>{label}</div>
)));
That might solve the problem, but I can’t be sure as the snippet of code you’ve provided is not sufficiently complete for me to test it.