“文档”类型上不存在属性“密码”

Posted

技术标签:

【中文标题】“文档”类型上不存在属性“密码”【英文标题】:Property 'password' does not exist on type 'Document' 【发布时间】:2020-08-13 00:56:06 【问题描述】:

我有一个 PartnerSchema

export const PartnerSchema: Schema = new Schema(
  id: 
        type: Number,
        require: [true, "EL id es necesario"],
        default: 0
  ,
  password :type:String,

);

并且我试图在将文档保存到数据库之前使用此函数在同一文件中对架构的密码进行哈希处理

PartnerSchema.pre('save', function(next)

  let user = this;

  // Make sure not to rehash the password if it is already hashed
  if(!user.isModified('password')) return next();

  // Generate a salt and use it to hash the user's password
    bcrypt.genSalt(10, (err, salt) => 

      if(err) return next(err);

      bcrypt.hash(user.password, salt, (err, hash) => 

          if(err) return next(err);
          user.password = hash;
          next();

      );

  );

但是在bcrypt.hash(user.password, salt, (err, hash) => 我得到这个错误

Property 'password' does not exist on type 'Document'

为什么我得到这个错误 id user = this 和所有属性?

【问题讨论】:

【参考方案1】:

您还可以将user 类型转换为PartnerDocument 类型:

PartnerSchema.pre('save', function(next)

  let user = <PartnerDocument>this;
  ...

);

【讨论】:

【参考方案2】:

类型问题可以用更简洁的方式解决

定义接口:

interface UserSchema extends mongoose.Document 
    password: string;

然后像这样用作 pre hook 的第一个参数:

userSchema.pre("save", async function (this: UserSchema, next: NextFunction) ...

【讨论】:

【参考方案3】:

您可以关注此代码

您可以通过此代码定义模型文件并要求 bcryptjs

PartnerSchema.pre('save',function(next)

   this.password= bcrypt.hashsync(this.password,10)

   next()

)

【讨论】:

仍然收到错误Property 'password' does not exist on type 'Document'【参考方案4】:

你需要为你的 pre hook 定义接口

export interface IUser extends mongoose.Document 
  password: string


PartnerSchema.pre<IUser>('save', function(next)...

【讨论】:

关于猫鼬的 GitHub 问题:github.com/Automattic/mongoose/issues/…

以上是关于“文档”类型上不存在属性“密码”的主要内容,如果未能解决你的问题,请参考以下文章

“文档”类型上不存在猫鼬属性“x”

TypeScript:“文档”类型上不存在属性“slug”

打字稿和猫鼬:“文档”类型上不存在属性“x”

类型“IFilterComp”上不存在属性“resetFilterValues”

“NodeRequire”类型上不存在属性“确保”

useRef Typescript 错误:“HTMLElement”类型上不存在属性“当前”