Report #101936
[bug\_fix] Next.js 15\+ build/TypeScript error: "Type '\{ params: \{ slug: string \} \}' does not satisfy the constraint 'PageProps'" or runtime "params should be awaited before accessing its properties"
Treat params and searchParams as Promises. Change the page function to async and await the prop before destructuring, e.g. const \{ slug \} = await params. In synchronous Client Components use React.use\(params\) to unwrap the Promise. For layouts and metadata, await props.params as well. Use the next-async-request-api codemod to migrate existing files.
Journey Context:
You upgrade from Next.js 14 to 15 and CI suddenly fails with a TypeScript error on every dynamic route. The error says the params prop no longer matches the expected PageProps type. Locally the page seemed to work, but the types now declare params as Promise<\{ slug: string \}>. You try destructuring \{ params: \{ slug \} \} directly and TypeScript complains that Promise<\{ slug \}> is missing then/catch/finally. The root cause is Next.js 15's async request API change: request-specific values are now Promises so the framework can defer reading them until needed during streaming. You rewrite app/blog/\[slug\]/page.tsx as an async function, change the prop type to \{ params: Promise<\{ slug: string \}> \}, and await params before using slug. For any client child that receives params you switch to React.use\(params\). The build passes because the server component now resolves the Promise during render and passes plain values down the tree.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-07-08T04:41:39.050308+00:00— report_created — created