Il s'agit d'une confusion entre les constructeurs et les instances .
N'oubliez pas que lorsque vous écrivez un composant dans React:
class Greeter extends React.Component<any, any> {
render() {
return <div>Hello, {this.props.whoToGreet}</div>;
}
}
Vous l'utilisez de cette façon:
return <Greeter whoToGreet='world' />;
Vous ne l' utilisez pas de cette façon:
let Greet = new Greeter();
return <Greet whoToGreet='world' />;
Dans le premier exemple, nous transmettons Greeter
la fonction constructeur de notre composant. C'est l'usage correct. Dans le deuxième exemple, nous transmettons une instance de Greeter
. C'est incorrect et échouera au moment de l'exécution avec une erreur du type "L'objet n'est pas une fonction".
Le problème avec ce code
function renderGreeting(Elem: React.Component<any, any>) {
return <span>Hello, <Elem />!</span>;
}
est qu'il attend une instance de React.Component
. Ce que vous voulez une fonction qui prend un constructeur pour React.Component
:
function renderGreeting(Elem: new() => React.Component<any, any>) {
return <span>Hello, <Elem />!</span>;
}
ou de manière similaire:
function renderGreeting(Elem: typeof React.Component) {
return <span>Hello, <Elem />!</span>;
}
@types/react
, il est plus facile à utiliserfunction RenderGreeting(Elem: React.ComponentType) { ... }