Solução 02
Veja a diff no github
Extraindo um componente <Card>
genérico
- A primeira coisa é criar o componente
components/Card.tsx
.
Feito isso, vamos colocar o código no componente:
function Card({ children }) { return ( <article className="max-w-4xl p-10 mx-auto mt-12 bg-white border-2 border-gray-200 shadow-2xl rounded-2xl bg-opacity-10">s {children} </article> );}
export default Card;
Como tipar o props.children
?
JSX.Element
: Não consegue receber arrays.JSX.Element | JSX.Element[]
; Não aceita strings.React.ReactChild
: Está deprecadoReact.ReactChild[]
: Está deprecadoReact.ReactNode
: É o que queremos.
Podemos então tipar dessa forma o componente <Card>
:
type CardProps = { children: React.ReactNode;};
function Card({ children }: CardProps) { return ( <article className="max-w-4xl p-10 mx-auto mt-12 bg-white border-2 border-gray-200 shadow-2xl rounded-2xl bg-opacity-10"> {children} </article> );}
export default Card;
O tipo PropsWithChildren
Uma outra forma de fazer isso é usar um tipo utilitário que é o PropsWithChildren
:
import { PropsWithChildren } from "react";
function Card({ children }: PropsWithChildren) { return ( <article className="max-w-4xl p-10 mx-auto mt-12 bg-white border-2 border-gray-200 shadow-2xl rounded-2xl bg-opacity-10"> {children} </article> );}
export default Card;
Créditos para os @stevekinney em relação