ich die Microsoft TypeScript-React-Starter bin mit und bekam diesen Compiler-Fehler während npm start
:JSX-Elementtyp 'App' ist keine Konstruktorfunktion für JSX-Elemente. Arten von Eigentum ‚setState‘ sind unvereinbar
./src/index.tsx
(16,5): error TS2605: JSX element type 'App' is not a constructor function for JSX elements.
Types of property 'setState' are incompatible.
Type '{ <K extends never>(f: (prevState: null, props: {}) => Pick<null, K>, callback?: (() => any) | un...' is not assignable to type '{ <K extends never>(f: (prevState: {}, props: any) => Pick<{}, K>, callback?: (() => any) | undef...'.
Types of parameters 'f' and 'f' are incompatible.
Type '(prevState: {}, props: any) => Pick<{}, any>' is not assignable to type '(prevState: null, props: {}) => Pick<null, any>'.
Types of parameters 'prevState' and 'prevState' are incompatible.
Type 'null' is not assignable to type '{}'.
So scheint es, wie meine setState
Funktion falsche Unterschrift hat, aber ich bin nicht sicher, wie man es beheben . Hier ist mein Code:
class App extends React.Component<{}, null> {
render() {
return (
<div className="App">
...
</div>
);
}
}
ReactDOM.render(
<Provider store={store}>
<App />
</Provider>,
document.getElementById('root') as HTMLElement
);
Ich verwende:
node v6.11.0
npm v5.1.0
typescript v2.4.1
react v15.6.1
redux v3.7.1
react-redux v5.0.5
react-scripts-ts v2.3.2
Update:
Ich fand heraus, dass die generischen Typen Entfernen <{}, null>
die Fehler löscht. Aber ich würde immer noch gerne lernen, warum ich den Fehler bekommen habe.
Wenn die App-Komponente keinen Status verwendet, können Sie sie stattdessen zu einer funktionalen zustandslosen Komponente machen. –
@ D-Reaper 'App' verwendet in meinem Fall den Status. Ich benutze 'redux', um den Zustand zu verwalten. Ich denke, deshalb muss ich 'prevState()' nicht explizit schreiben? – CherryQu
Ich glaube, da Sie als Argument des zweiten Typs in React.Component "null" übergeben, die die Struktur des Zustands definiert und dass es nur mit bestimmten Typen (z. B. Objekt) kompatibel ist, damit TS diesen Fehler auslöst. '' oder nur '<{}>' würde auch funktionieren. –