TypeScript报错:Prisma查询中Int类型ID无法接收req.params.id值
解决Prisma查询时TypeScript类型不匹配问题
问题核心是**req.params.id默认是字符串类型**——哪怕URL里输入的是数字,HTTP请求的路径参数都会以字符串形式传递,而你的Prisma Schema里把用户ID定义成了Int类型,所以TypeScript会抛出类型不兼容的错误。
下面是两种可行的解决方式:
1. 转换字符串为数字并校验(推荐)
把req.params.id转换成数字,同时校验转换结果是否有效,避免无效ID导致后续查询出错:
async showInfo(req: Request, res: Response){ const idPerson = parseInt(req.params.id, 10); // 校验是否是有效数字 if (isNaN(idPerson)) { return res.status(400).json({ error: "无效的用户ID" }); } const getUser = await prisma.user.findUnique({ where: { id: idPerson, }, }); return res.json({ getUser }); }
你也可以用Number(req.params.id)替代parseInt,但parseInt能更明确地指定进制(这里用10进制),避免处理类似"0x12"这类特殊字符串时出现意外。
2. 类型断言(不推荐)
如果你能100%确保req.params.id是数字格式的字符串,可以用类型断言强制告诉TypeScript这是数字,但这种方式跳过了类型校验,存在安全风险:
async showInfo(req: Request, res: Response){ const idPerson = req.params.id as unknown as number; const getUser = await prisma.user.findUnique({ where: { id: idPerson, }, }); return res.json({ getUser }); }
优先推荐第一种方式,既能解决类型问题,又能对输入参数做合法性校验,让代码更健壮。
内容的提问来源于stack exchange,提问作者Thiago David
相关产品推荐
相关产品推荐

