Sou meio novo no uso do next.js. Recebi esse erro e não consigo
Erro de tipo: O tipo 'ComposerPageProps' não atende à restrição 'PageProps'. Os tipos da propriedade 'params' são incompatíveis. O tipo '{ id: string; }' não possui as seguintes propriedades do tipo 'Promise': then, catch, finally, [Symbol.toStringTag]
32 | 33 | // Verifique o tipo de suporte da função de entrada
34 | checkFields<Diff<PageProps, FirstArg<TEntry['default']>, 'default'>>() | ^ 35 | 36 | // Verifique os argumentos e o tipo de retorno da função generateMetadata 37 | if ('generateMetadata' in entry) {
Este é o meu código que pode causar o erro:
interface ComposerPageProps {
params: {
id: string
}
}
export async function generateMetadata({params}: ComposerPageProps): Promise<Metadata> {
const composer = await getComposer(params.id)
if (!composer) {
return {
title: "Composer Not Found | Sheetly",
}
}
return {
title: `${composer.name} | Composer | Sheetly`,
description: `Explore sheet music by ${composer.name}, ${composer.periods} composer. Download and play beautiful arrangements of their most famous works.`,
}
}
export default async function ComposerPage({params}: ComposerPageProps) {
return (
<ComposerPageClient id={params.id}/>
)
}
e meu componente cliente
export default async function ComposerPageClient({id}: { id: string }) {
const composer = await getComposer(id);
const sheets = await getAllSheetsFromComposer(id);
const favorites = await getFavorites();
return (
<div className="container mx-auto px-4 py-8">
<ComposerProfile composer={composer} sheets={sheets}/>
<div className="mt-12">
<ComposerSheets sheets={sheets} userFavorites={favorites}/>
</div>
</div>
)
}
Este é um erro associado à forma como você está definindo os tipos para as
params
propriedades nagenerateMetadata
função. A partir da versão 15 do NextJS, objetos comoparams
esearchParams
passados para opage
componente ougenerateMetaData
função agora são Promises e não objetos comuns. Você precisará modificar as propriedades params de um objeto comum para uma Promise. Além disso, você precisa aguardar o valor dos seus parâmetros antes de tentar passá-los como valor para a suagetComposer()
função.Além disso, com base na documentação do NextJS, é recomendável usar o tipo integrado para a
generateMetadata
função.Veja a documentação aqui: https://nextjs.org/docs/app/building-your-application/optimizing/metadata#dynamic-metadata