Dies ist eine Verwechslung zwischen Konstruktoren und Instanzen .
Denken Sie daran, wenn Sie eine Komponente in React schreiben:
class Greeter extends React.Component<any, any> {
render() {
return <div>Hello, {this.props.whoToGreet}</div>;
}
}
Sie verwenden es so:
return <Greeter whoToGreet='world' />;
Sie verwenden es nicht so:
let Greet = new Greeter();
return <Greet whoToGreet='world' />;
Im ersten Beispiel geben wir Greeter
die Konstruktorfunktion für unsere Komponente weiter. Das ist die richtige Verwendung. Im zweiten Beispiel geben wir eine Instanz von weiter Greeter
. Das ist falsch und schlägt zur Laufzeit mit einem Fehler wie "Objekt ist keine Funktion" fehl.
Das Problem mit diesem Code
function renderGreeting(Elem: React.Component<any, any>) {
return <span>Hello, <Elem />!</span>;
}
ist, dass es eine Instanz von erwartet React.Component
. Was möchten Sie eine Funktion, die einen Konstruktor benötigt für React.Component
:
function renderGreeting(Elem: new() => React.Component<any, any>) {
return <span>Hello, <Elem />!</span>;
}
oder ähnlich:
function renderGreeting(Elem: typeof React.Component) {
return <span>Hello, <Elem />!</span>;
}
@types/react
function RenderGreeting(Elem: React.ComponentType) { ... }