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

Next.js 15 App Router构建报错:参数类型不兼容求助

解决Next.js 15 App Router构建时API路由类型不兼容错误

错误原因分析

构建报错的核心是TypeScript类型推断混乱:你错误地对params使用了await,导致类型系统认为params是Promise<any>,但实际App Router中API路由的第二个参数是同步的对象({ params: { id: string } }),两者类型不匹配,触发构建时的类型检查失败。

解决方案步骤

  • 移除不必要的await:直接解构params,不需要异步等待
  • 清理构建缓存:避免旧的错误类型缓存干扰
  • 确认参数类型正确性

修正后的API路由代码

import { fetchImagesById, fetchPdfById, fetchReferenciasById } from "@/lib/db";
import { NextRequest, NextResponse } from "next/server";

export async function GET(
  req: NextRequest,
  { params }: { params: { id: string } },
) {
  // 移除await,直接解构同步的params对象
  const { id } = params;

  let referencias: any[];
  let fotos: any[];
  let pdf: any[];

  try {
    if (id) {
      referencias = await fetchReferenciasById(id);
      pdf = await fetchPdfById(id);
      fotos = await fetchImagesById(id);

      const fotosUpdated = fotos.map((item) => ({
        foto_1: item.foto_1
          ? `data:image/png;base64,${Buffer.from(item.foto_1).toString("base64")}`
          : "/foto_placeholder.png",
        foto_2: item.foto_2
          ? `data:image/png;base64,${Buffer.from(item.foto_2).toString("base64")}`
          : "/foto_placeholder.png",
        foto_3: item.foto_3
          ? `data:image/png;base64,${Buffer.from(item.foto_3).toString("base64")}`
          : "/foto_placeholder.png",
        foto_4: item.foto_4
          ? `data:image/png;base64,${Buffer.from(item.foto_4).toString("base64")}`
          : "/foto_placeholder.png",
        foto_5: item.foto_5
          ? `data:image/png;base64,${Buffer.from(item.foto_5).toString("base64")}`
          : "/foto_placeholder.png",
        foto_6: item.foto_6
          ? `data:image/png;base64,${Buffer.from(item.foto_6).toString("base64")}`
          : "/foto_placeholder.png",
      }));

      const pdfUpdated = pdf.map((item) => ({
        medidas_montagem: item.medidas_montagem
          ? `data:application/pdf;base64,${Buffer.from(item.medidas_montagem).toString("base64")}`
          : "-",
      }));

      const unifiedResult = {
        referencias,
        pdfUpdated,
        fotosUpdated,
      };
      return NextResponse.json(unifiedResult);
    }

    return NextResponse.json(
      { message: "Invalid query parameters." },
      { status: 400 },
    );
  } catch (error) {
    console.error(error);
    return NextResponse.json({ message: "Server error." }, { status: 500 });
  }
}

清理缓存并重新构建

执行以下命令清理缓存后再尝试构建:

rm -rf .next node_modules/.cache
npm run build

额外排查点

如果上述操作后仍报错,检查:

  • 确认@/lib/db中的导出函数类型是否正确,是否存在返回值类型导致的间接类型冲突
  • 确保next.config.js中没有开启可能影响类型生成的特殊配置
  • 确认所有依赖(尤其是typescript和@types/node)版本与Next.js 15.0.2兼容

内容的提问来源于stack exchange,提问作者Gabriel MGFC-DEV

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 02:57:13