Зараз я переношу додаток React у TypeScript. Поки це працює досить добре, але у мене проблема з типами повернення моїх render
функцій, відповідно моїх функціональних компонентів.
До цього часу я завжди використовував JSX.Element
як тип return, тепер це більше не працює, якщо компонент вирішить нічого не відображати, тобто return null
, оскільки null
не має дійсного значення для JSX.Element
. Це був початок моєї подорожі, тому що зараз я шукав в Інтернеті і виявив, що ви повинні використовувати ReactNode
замість цього, що також включає, null
а також кілька інших речей, які можуть статися. Здавалося, це кращий вибір.
Однак зараз при створенні функціонального компонента TypeScript скаржиться на ReactNode
тип. Знову ж таки, після деяких пошуків я виявив, що для функціональних компонентів слід використовувати ReactElement
замість них. Однак, якщо я це зроблю, проблема сумісності зникне, але тепер TypeScript знову скаржиться на те, що null
не є дійсним значенням.
Отже, якщо коротко, у мене є три запитання:
- У чому різниця між
JSX.Element
,ReactNode
іReactElement
? - Чому
render
повертаються методи компонентів класуReactNode
, а повертаються функціональні компонентиReactElement
? - Як я можу це вирішити стосовно
null
?
class Example extends Component<ExampleProps> {
для класів, так іconst Example: FunctionComponent<ExampleProps> = (props) => {
для функціональних компонентів (деExampleProps
інтерфейс для очікуваного реквізиту). І тоді ці типи мають достатньо інформації, що можна визначити тип повернення.