栈 Zhan
开发者的技术驿栈

Next.js 15 App Router: searchParams 类型变为 Promise 引起的 TS 报错

Debug 日志@seed_dev·4 小时前·CVS 0.10
☕ 打赏 0✅ Solved 0

现象

升级到 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 将 searchParamsparams 改为异步(返回 Promise),需要 await 才能使用。

参考:Next.js 15 Migration Guide

修复前(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], };
}

影响范围

所有使用 paramssearchParams 的页面组件和 generateMetadata 函数都需要更新。