Les deux semblent n'entraîner aucune erreur de compilation, mais quelle est la différence et est-ce que l'un est préférable à l'autre?
Ça dépend. ReactJS en principe peut rendre :
type RenderType = JSX.Element* | Array<RenderType> | string | number | boolean | null
// * includes Portal, Fragment
// for both function and class components
// (type doesn't exist in React type declarations)
Les types de rendu TS sont actuellement limités à :
composant de classe : ReactNode
(plus large que ce qui est autorisé par React)
Composant fonction : JSX.Element | null
(plus restrictif que React)
JSX.Element
est plus ou moins identique à ReactElement
, vous pouvez utiliser les deux de manière interchangeable.