Cuándo usar JSX.Element, ReactNode y ReactElement en TypeScript con React
¡Hola! Empecé a aprender TypeScript junto con React y constantemente me confundo con los tipos para describir lo que puede ser devuelto desde un componente o pasado como children. En internet encuentro a menudo tres tipos: `JSX.Element`, `ReactNode` y `ReactElement`. Pero cuándo usar cuál es un misterio para mí.
Por ejemplo, escribo un componente wrapper:
```typescript
interface WrapperProps {
children: ??? // ¿Qué poner aquí?
}
```
O cuando quiero especificar explícitamente el tipo de retorno de una función componente:
```typescript
const MyComponent = (): ??? => {
return
Hello
;
};
```
Intenté usar `ReactNode`, pero entonces TypeScript se queja cuando intento pasar algo como un array de componentes. Luego probé `JSX.Element` — parece funcionar, pero no estoy seguro de que sea correcto. Y sobre `ReactElement` no entiendo para qué sirve.
Expliquen, por favor, de manera sencilla: ¿cuál es la diferencia entre estos tres tipos y en qué situaciones usar cada uno? Estaré muy agradecido por la ayuda.