Lorsque l'on utilise TypeScript avec ReactJS il arrive souvent que l'on souhaite passer en tant que props un composant non instancié. Comment ça marche ? Pour cela il faut définir son type.
L'utilisation de React.ComponentType<P> est la bonne méthode.
Ce type est adapté pour accepter un composant de classe (React.ComponentClass<P>) ou un composant de fonction (React.FunctionComponent<P> alias React.FC<P>) qui prend des props définies par l'interface P.
Note annexe :
React.ReactNode et React.ReactElement sont les types pour le JSX retourné par le composant - pas pour un composant appelable, c'est-à-dire non instancié par le JSX ou createElement
Il n'est pas recommandé d'utiliser <unknown> en tant que type générique pour les props du composant. Seulement si le composant n'utilise pas de props et que le type {} génère un warning dans votre configuration
Il faut déclarer que le composant nécessite uniquement les props que l'on fournira lorsque l'on instanciera le composant avec React.createElement(Comp) (ou la syntaxe JSX équivalente <Comp/>).
Dans ce cas là il n'y a pas de props attendues, donc ce serait React.ComponentType
On obtient une erreur si on appele Comp sans fournir someKey ! On n'obtient pas cette erreur en appelant React.createElement(Comp) car pour une raison obscure, l'argument props est facultatif.
L'approche JSX est donc à privilégier.