Usando o TypeScript com React, não precisamos mais estender React.Propspara que o compilador saiba que todos os adereços do componente react podem ter filhos:
interface MyProps { }
class MyComponent extends React.Component<MyProps, {}> {
public render(): JSX.Element {
return <div>{this.props.children}</div>;
}
}
No entanto, não parece ser o caso para componentes funcionais sem estado:
const MyStatelessComponent = (props: MyProps) => {
return (
<div>{props.children}</div>
);
};
Emite o erro de compilação:
Erro: (102, 17) TS2339: A propriedade 'filhos' não existe no tipo 'MyProps'.
Acho que é porque realmente não há como o compilador saber que uma função vanilla será fornecida childrenno argumento props.
Portanto, a questão é como devemos usar filhos em um componente funcional sem estado no TypeScript?
Eu poderia voltar ao modo antigo MyProps extends React.Props, mas a Propsinterface está marcada como obsoleta e os componentes sem estado não têm ou suportam um, Props.refconforme eu o entendo.
Então, eu poderia definir o childrenadereço manualmente:
interface MyProps {
children?: React.ReactNode;
}
Primeiro: é ReactNodeo tipo correto?
Segundo: tenho que escrever filhos como opcionais ( ?) ou então os consumidores pensarão que isso childrené um atributo do componente ( <MyStatelessComponent children={} />) e gerarão um erro se não for fornecido com um valor.
Parece que estou faltando alguma coisa. Alguém pode esclarecer se meu último exemplo é a maneira de usar componentes funcionais sem estado com crianças no React?
@types