Используя 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