汎用機能コンポーネントを作成することは可能ですか?
次の例のようなものがうまくいくと思いました:
type MyComponentProps<T> = T & {
component: ComponentType<T>,
primary?: boolean,
size?: 'S' | 'M' | 'L'
}
const MyComponent: ComponentType<MyComponentProps<T>> = ({ component, size, primary,...rest }) => {
/* ... */
}
... だがしかし
コンポーネントを関数として宣言し、 React.ComponentType 宣言を省略すると、宣言はうまくいくようです:
function MyComponent<T>({ size, primary, component, ...rest }: MyComponentProps<T>) {
/* ... */
}
しかし、コンポーネントをそのように書くと、TSX (私は最新の create-react-app を使用しています) は、React.ComponentType 宣言が欠落しているため、それをコンポーネントとして認識しなくなりました。