Al usar TypeScript con React, ya no tenemos que extendernos React.Propspara que el compilador sepa que todos los accesorios de los componentes react pueden tener hijos:
interface MyProps { }
class MyComponent extends React.Component<MyProps, {}> {
public render(): JSX.Element {
return <div>{this.props.children}</div>;
}
}
Sin embargo, no parece ser el caso de los componentes funcionales sin estado:
const MyStatelessComponent = (props: MyProps) => {
return (
<div>{props.children}</div>
);
};
Emite el error de compilación:
Error: (102, 17) TS2339: La propiedad 'children' no existe en el tipo 'MyProps'.
Supongo que esto se debe a que realmente no hay forma de que el compilador sepa que se va a dar una función de vainilla childrenen el argumento props.
Entonces, la pregunta es ¿cómo deberíamos usar los niños en un componente funcional sin estado en TypeScript?
Podría volver a la forma anterior de MyProps extends React.Props, pero la Propsinterfaz está marcada como obsoleta y los componentes sin estado no tienen ni admiten una Props.refcomo yo la entiendo.
Entonces podría definir el childrenaccesorio manualmente:
interface MyProps {
children?: React.ReactNode;
}
Primero: ¿es ReactNodeel tipo correcto?
Segundo: tengo que escribir child como opcional ( ?) o los consumidores pensarán que childrense supone que es un atributo del componente ( <MyStatelessComponent children={} />) y generarán un error si no se les proporciona un valor.
Parece que me falta algo. ¿Alguien puede proporcionar algo de claridad sobre si mi último ejemplo es la forma de usar componentes funcionales sin estado con niños en React?
@types