Зараз я переношу додаток 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інтерфейс для очікуваного реквізиту). І тоді ці типи мають достатньо інформації, що можна визначити тип повернення.