You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 23:50:44