如何在打字稿环境中使用 mongoose.Schema.pre() ?

jia*_*lin 0 mongoose

userSchema.pre('save',(next)=>{
    if(!this.isModified('password')){
        return next();
    }
    this.password = user.encryptPassword(this.password);
    next();
})
Run Code Online (Sandbox Code Playgroud)

在上面的代码中,打字稿编译器告诉我“this”是“globalThis”的类型。然而,在 JavaScript 中,我们总是认为它具有“mongoose.Document”类型。这里我想访问某个 mongoose.Document 对象的“isModified”方法,我们只能使用“this”来访问它。如何让打字稿编译器知道或考虑“this”的类型为 mongoose.Document ?

Gré*_*EUT 5

这里的问题是您使用箭头函数。箭头函数会将实际上下文带入底层函数。解决方案是删除箭头函数的使用,以便应用函数的自然上下文。喜欢 :

userSchema.pre('save', function (next) {
    if(!this.isModified('password')){
        return next();
    }

    this.password = user.encryptPassword(this.password);

    next();
});
Run Code Online (Sandbox Code Playgroud)