Используя TypeScript с React, нам больше не нужно расширяться, React.Propsчтобы компилятор знал, что все свойства компонентов React могут иметь дочерние элементы:
interface MyProps { }
class MyComponent extends React.Component<MyProps, {}> {
public render(): JSX.Element {
return <div>{this.props.children}</div>;
}
}
Однако, похоже, это не относится к функциональным компонентам без состояния:
const MyStatelessComponent = (props: MyProps) => {
return (
<div>{props.children}</div>
);
};
Выдает ошибку компиляции:
Ошибка: (102, 17) TS2339: Свойство «children» не существует для типа «MyProps».
Я предполагаю, что это потому, что компилятор действительно не может узнать, что в childrenаргументе props будет указана ванильная функция .
Итак, вопрос в том, как мы должны использовать дочерние элементы в функциональном компоненте без сохранения состояния в TypeScript?
Я мог бы вернуться к старому способу MyProps extends React.Props, но Propsинтерфейс помечен как устаревший , а компоненты без сохранения состояния не имеют и не поддерживают a, Props.refкак я понимаю.
Итак, я мог определить childrenопору вручную:
interface MyProps {
children?: React.ReactNode;
}
Во-первых: ReactNodeправильный тип?
Во-вторых: я должен написать дочерние элементы как optional ( ?), иначе потребители подумают, что childrenэто должен быть атрибут компонента ( <MyStatelessComponent children={} />), и вызовут ошибку, если не указано значение.
Кажется, я что-то упускаю. Может ли кто-нибудь прояснить, является ли мой последний пример способом использования функциональных компонентов без сохранения состояния с дочерними элементами в React?
@types