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

Next.js 15构建时出现PageProps类型不兼容错误,寻求问题原因及解决方案

Next.js 15构建时出现PageProps类型不兼容错误,寻求问题原因及解决方案

看起来你遇到的问题主要是代码里的两个关键错误导致的,结合错误提示帮你拆解一下:

问题根源分析

  1. generateStaticParams函数的返回逻辑完全错误
    你现在写的return docs((article) => ({ myname: docs.fields.myname, }));是把getEntries返回的响应对象当成函数来调用了,这明显不对。Contentful的getEntries返回的是一个包含items数组的对象,你需要遍历这个数组来生成静态参数。而且回调里你应该用当前遍历到的article,而不是外层的docs对象,不然根本拿不到每个条目的myname。

  2. 变量名不匹配加剧类型冲突
    你的MyProps里定义的params字段是myname,但页面组件里却解构了const { name } = params;,这本身就存在类型不匹配。再加上第一个错误导致TypeScript的类型推断混乱,编译器就误以为你的params应该是Promise类型,才抛出了那个奇怪的错误——说你的普通对象缺少Promise的方法。

修正方案

第一步:修复generateStaticParams函数

把遍历逻辑改成正确的数组map,并且引用当前条目的字段:

export async function generateStaticParams() {
  const queryOptions = {
    content_type: "documentation",
    select: "fields.myname",
  };
  const docs = await client.getEntries(queryOptions);
  // 遍历docs.items数组,返回每个条目对应的params对象
  return docs.items.map((article) => ({
    myname: article.fields.myname,
  }));
}

第二步:修正页面组件的变量名

确保解构的字段和类型定义一致:

export default async function ThePage(props: MyProps) {
  const { params } = props;
  // 这里应该是myname,不是name
  const { myname } = params;
  // 后续业务逻辑...
}

可选优化:让TypeScript自动推断类型

如果你用的是App Router,其实不需要手动定义MyProps,直接在组件参数里声明类型更简洁,也能避免类型不一致的问题:

export default async function ThePage({ params }: { params: { myname: string } }) {
  const { myname } = params;
  // ...
}

这样修改后,再运行npm run build应该就能解决那个类型错误了。

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.08 07:35:31