Next 15 App Router构建失败:generateMetadata类型错误求助
解决Next.js 15 App Router中generateMetadata类型不兼容问题
问题根源
你错误地将params和searchParams定义为Promise类型,但在Next.js App Router的generateMetadata函数中,这两个参数是直接的同步对象,并非Promise,不需要用await解析。同时你的路由是[slug],但Props里params的属性名写了id,也会导致类型不匹配。
修正步骤
- 修正Props类型定义:移除
Promise包裹,让params的属性名与动态路由文件名对应(路由是[slug],所以params的key为slug) - 调整函数逻辑:直接访问params属性,无需
await,同时确保函数返回符合要求的Metadata对象
修正后的代码
import type { Metadata } from 'next'; type Props = { params: { slug: string }; searchParams: { [key: string]: string | string[] | undefined }; }; export async function generateMetadata({ params }: Props): Promise<Metadata> { const slug = params.slug; const post: SinglePostSourceI = await getSinglePost(slug); // 必须返回Metadata类型的对象,根据你的业务需求补充字段 return { title: post.title, description: post.description }; }
额外注意点
- 动态路由文件名需与params的属性名一致:如果路由文件是
[id].tsx,则params的key应为id - 原代码缺少
Metadata返回值,这也是构建失败的潜在原因,必须补充返回逻辑
内容的提问来源于stack exchange,提问作者Vladimir
相关产品推荐
相关产品推荐

