Questa è una confusione tra i costruttori e istanze.
Ricorda che quando si scrive un componente in React:
class Greeter extends React.Component<any, any> {
render() {
return <div>Hello, {this.props.whoToGreet}</div>;
}
}
Si utilizza in questo modo:
return <Greeter whoToGreet='world' />;
È non lo fanno usarlo in questo modo:
let Greet = new Greeter();
return <Greet whoToGreet='world' />;
Nel primo esempio, stiamo passando intorno a Greeter
, th e funzione costruttore per il nostro componente. Questo è l'uso corretto. Nel secondo esempio, stiamo analizzando l'istanza di Greeter
. Questo non è corretto e fallirà in fase di esecuzione con un errore come "L'oggetto non è una funzione".
Il problema con questo codice
function renderGreeting(Elem: React.Component<any, any>) {
return <span>Hello, <Elem />!</span>;
}
è che si aspetta un esempio di React.Component
. Ciò che si desidera una funzione che prende un costruttore per React.Component
:
function renderGreeting(Elem: new() => React.Component<any, any>) {
return <span>Hello, <Elem />!</span>;
}
o simile:
function renderGreeting(Elem: typeof React.Component) {
return <span>Hello, <Elem />!</span>;
}
fonte
2015-08-04 17:28:10
Penso che volevi dire il contrario in giro? – apieceofbart
La modifica dell'istruzione inport non è necessaria se si configura TypeScript (ad esempio in 'tsconfig.json') in' allowSyntheticDefaultImports'. Vedi: https://www.typescriptlang.org/docs/handbook/compiler-options.html e discussione qui: http: //blog.jonasbandi.net/2016/10/mito-of-superset.html # comment-2.936.077,278 mila – jbandi