Ich migriere derzeit eine React-Anwendung zu TypeScript. Bisher funktioniert das ziemlich gut, aber ich habe ein Problem mit den Rückgabetypen meiner renderFunktionen bzw. meiner Funktionskomponenten.
Bisher hatte ich immer JSX.Elementals Rückgabetyp verwendet, jetzt funktioniert dies nicht mehr, wenn eine Komponente beschließt, nichts zu rendern, dh zurückzugeben null, da dies nullkein gültiger Wert für ist JSX.Element. Dies war der Beginn meiner Reise, denn jetzt habe ich im Internet gesucht und festgestellt, dass Sie ReactNodestattdessen verwenden sollten, was auch nulleinige andere Dinge beinhaltet, die passieren können. Dies schien die bessere Wahl zu sein.
Beim Erstellen einer Funktionskomponente beschwert sich TypeScript jedoch über den ReactNodeTyp. Nach einigem Suchen stellte ich wieder fest, dass Sie ReactElementstattdessen für Funktionskomponenten verwenden sollten . Wenn ich dies tue, ist das Kompatibilitätsproblem jedoch behoben, aber jetzt beschwert sich TypeScript erneut darüber, dass es sich nullnicht um einen gültigen Wert handelt.
Um es kurz zu machen, ich habe drei Fragen:
- Was ist der Unterschied zwischen
JSX.Element,ReactNodeundReactElement? - Warum geben die
renderMethoden von Klassenkomponenten zurückReactNode, aber FunktionskomponentenReactElement? - Wie löse ich das in Bezug auf
null?
class Example extends Component<ExampleProps> {für Klassen undconst Example: FunctionComponent<ExampleProps> = (props) => {für Funktionskomponenten (woExamplePropsist eine Schnittstelle für die erwarteten Requisiten). Und dann haben diese Typen genügend Informationen, um auf den Rückgabetyp schließen zu können.