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
相关产品推荐
相关产品推荐

