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

TypeScript+TypeORM创建用户时报错Property 'password' does not exist on type 'User[]'

错误产生原因

  • TypeORM的Repository.create()方法支持传入单个实体对象或者对象数组,当TypeScript无法确定你传入的req.body是单个对象时,会将返回值的类型推断为User[](用户数组),数组本身不存在password属性,因此触发TS2339类型错误。
  • 你当前代码中调用bcrypt.hash(password, salt)时,password变量未做任何声明定义,运行时也会抛出未定义错误。

解决方法

  1. 明确标注user变量的类型为单个User实体,同时可主动构造传入create方法的对象,避免类型推断异常:
// 可选:提前给请求body定义类型,提升类型安全性
interface CreateUserReqBody {
  firstName: string;
  lastName: string;
  email: string;
  password: string;
}

export const createUser = async (req: Request, res: Response): Promise<Response> => {
  const { body } = req as { body: CreateUserReqBody };
  try {
    const emailExists = await getRepository(User).findOne({
      where: { email: body.email }
    });
    if (emailExists) {
      return res.status(400).json({ message: 'User already exists' });
    }
    // 明确指定user类型为User,主动构造参数避免类型推断错误
    const user: User = getRepository(User).create({
      firstName: body.firstName,
      lastName: body.lastName,
      email: body.email,
      password: body.password
    });
    const salt = await bcrypt.genSalt(10);
    // 传入正确的密码参数,替换为加密后的值
    user.password = await bcrypt.hash(user.password, salt);
    await getRepository(User).save(user);
    return res.status(200).json(user);
  } catch (error) {
    return res.status(400).json({ message: 'Error creating user' });
  }
}
  1. 如果你不想额外定义请求体类型,也可以通过类型断言直接修正user的类型:
let user = getRepository(User).create(req.body) as User;

修改后即可解决password属性不存在的类型报错。


内容的提问来源于stack exchange,提问作者Diego Rubalcava

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 07:36:07