Это путаница между конструкторами и экземплярами .
Помните, что когда вы пишете компонент в React:
class Greeter extends React.Component<any, any> {
render() {
return <div>Hello, {this.props.whoToGreet}</div>;
}
}
Вы используете это так:
return <Greeter whoToGreet='world' />;
Вы не используете это таким образом:
let Greet = new Greeter();
return <Greet whoToGreet='world' />;
В первом примере, мы проходим вокруг Greeter
, в функцию конструктора для нашего компонента. Это правильное использование. Во втором примере, мы проходим вокруг экземпляра из Greeter
. Это неверно и приведет к ошибке во время выполнения с ошибкой типа «Объект не является функцией».
Проблема с этим кодом
function renderGreeting(Elem: React.Component<any, any>) {
return <span>Hello, <Elem />!</span>;
}
является то , что он ожидает экземпляр из React.Component
. То , что вы хотите функцию , которая принимает конструктор для React.Component
:
function renderGreeting(Elem: new() => React.Component<any, any>) {
return <span>Hello, <Elem />!</span>;
}
или аналогично:
function renderGreeting(Elem: typeof React.Component) {
return <span>Hello, <Elem />!</span>;
}
@types/react
их, ее проще всего использоватьfunction RenderGreeting(Elem: React.ComponentType) { ... }