Next.js13+Prisma+MongoDB数据渲染失败:TypeScript类型错误求助
解决TypeScript错误:Property 'projectsData' does not exist on type 'void | ...'
问题根源
getProjects函数的finally块中使用了return console.log("datafetched"),而console.log的返回值是void。这导致函数的返回类型变成了void | { projectsData: Projects[] }——当代码执行到finally时,会覆盖try或catch的返回值,最终可能返回void,因此TypeScript会报错无法解构projectsData属性。
修复方案
修改getProjects函数,移除finally块中的return关键字,只保留日志打印操作:
import prismaClientConnect from './prismaClientConnect' export async function getProjects() { try { const projectsData = await prismaClientConnect.projects.findMany() return { projectsData } } catch (error) { console.error(error) // 使用console.error更适合输出错误日志 // 可选:抛出错误让上层处理,或返回默认空数组 throw error // 若不想抛出错误,可返回默认值:return { projectsData: [] } } finally { console.log("datafetched") // 仅执行日志打印,不返回值 } }
额外优化建议
- 类型明确化:可以为函数指定返回类型,增强类型安全:
import { Projects } from '@prisma/client' export async function getProjects(): Promise<{ projectsData: Projects[] }> { // 函数内容同上 }
- 错误处理逻辑:如果希望页面能捕获并处理错误,推荐在
catch中抛出错误,上层组件可以通过try/catch包裹调用逻辑,避免因projectsData为undefined导致渲染崩溃。
内容的提问来源于stack exchange,提问作者Manshul Duggal
相关产品推荐
相关产品推荐

