You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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,也会导致类型不匹配。

修正步骤

  1. 修正Props类型定义:移除Promise包裹,让params的属性名与动态路由文件名对应(路由是[slug],所以params的key为slug)
  2. 调整函数逻辑:直接访问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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 00:22:04