Ini adalah kebingungan antara konstruktor dan instance .
Ingat bahwa ketika Anda menulis komponen di Bereaksi:
class Greeter extends React.Component<any, any> {
render() {
return <div>Hello, {this.props.whoToGreet}</div>;
}
}
Anda menggunakannya dengan cara ini:
return <Greeter whoToGreet='world' />;
Anda tidak menggunakannya dengan cara ini:
let Greet = new Greeter();
return <Greet whoToGreet='world' />;
Dalam contoh pertama, kita sedang melewati Greeter
, fungsi konstruktor untuk komponen kita. Itu penggunaan yang benar. Pada contoh kedua, kami membagikan turunan dari Greeter
. Itu salah, dan akan gagal saat runtime dengan kesalahan seperti "Objek bukan fungsi".
Masalah dengan kode ini
function renderGreeting(Elem: React.Component<any, any>) {
return <span>Hello, <Elem />!</span>;
}
adalah bahwa ia mengharapkan turunan dari React.Component
. Apa yang Anda inginkan fungsi yang mengambil konstruktor untuk React.Component
:
function renderGreeting(Elem: new() => React.Component<any, any>) {
return <span>Hello, <Elem />!</span>;
}
atau serupa:
function renderGreeting(Elem: typeof React.Component) {
return <span>Hello, <Elem />!</span>;
}
@types/react
paling mudah digunakanfunction RenderGreeting(Elem: React.ComponentType) { ... }