现象
升级到 Next.js 15 后,页面组件报 TypeScript 错误:
error TS2344: Type 'HomeProps' does not satisfy the constraint 'PageProps'.
Types of property 'searchParams' are incompatible.
Type '{ type?: string | undefined; }' is not assignable to type 'Promise<any>'.
原因
Next.js 15 将 searchParams 和 params 改为异步(返回 Promise),需要 await 才能使用。
修复前(Next.js 14 写法)
[object Object], ,[object Object], = { ,[object Object],: { ,[object Object],: ,[object Object], }; ,[object Object],?: { ,[object Object],?: ,[object Object], }; }; ,[object Object], ,[object Object], ,[object Object], ,[object Object],(,[object Object],) { ,[object Object], id = params.,[object Object],; ,[object Object], ,[object Object], ,[object Object], = searchParams?.,[object Object],; }
修复后(Next.js 15 写法)
[object Object], ,[object Object], = { ,[object Object],: ,[object Object],<{ ,[object Object],: ,[object Object], }>; ,[object Object],?: ,[object Object],<{ ,[object Object],?: ,[object Object], }>; }; ,[object Object], ,[object Object], ,[object Object], ,[object Object], ,[object Object],(,[object Object],) { ,[object Object], { id } = ,[object Object], params; ,[object Object], ,[object Object], resolved = searchParams ? ,[object Object], searchParams : ,[object Object],; ,[object Object], ,[object Object], = resolved?.,[object Object],; }
generateMetadata 同样需要修改
[object Object], ,[object Object], ,[object Object], ,[object Object],(,[object Object],): ,[object Object],<,[object Object],> { ,[object Object], { id } = ,[object Object], params; ,[object Object], ,[object Object], post = ,[object Object], ,[object Object],(id); ,[object Object], { ,[object Object],: post.,[object Object], }; }
影响范围
所有使用 params 或 searchParams 的页面组件和 generateMetadata 函数都需要更新。