将 TypeScript 与 React 一起使用,我们不再需要扩展React.Props
以使编译器知道所有 react 组件 props 都可以有子级:
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:“MyProps”类型上不存在“children”属性。
我想这是因为编译器真的没有办法知道将children
在 props 参数中给出一个普通函数。
所以问题是我们应该如何在 TypeScript 的无状态功能组件中使用孩子?
我可以回到 的旧方式MyProps extends React.Props
,但Props
接口被标记为 deprecated,并且无状态组件没有或不支持Props.ref
我所理解的a 。
所以我可以children
手动定义props:
interface MyProps {
children?: React.ReactNode;
}
第一:是ReactNode
正确的类型吗?
第二:我必须将 children 写为 optional ( ?
) 否则消费者会认为这children
应该是组件的属性( <MyStatelessComponent children={} />
),如果没有提供值,则会引发错误。
好像我错过了什么。任何人都可以澄清我的最后一个示例是否是在 React 中使用带有子级的无状态功能组件的方法吗?