javascript - 使用 Mongoose 模型设置 typescript

标签 javascript typescript mongoose

出于某种原因,typescript 不接受我的代码。在 UserScema.pre 方法中,typescript 错误表示属性 createdAtpassword 在文档类型中不存在(this)。如何使 typescript 接口(interface)应用于此方法并返回 IUserDocument 对象?

import {Schema, Model, Document, model} from 'mongoose';
import bcrypt from 'bcrypt-nodejs';

export interface IUserDocument extends Document{
    createdAt: Date,
    username: string,
    displayName: string,
    email: string,
    googleId: string,
    password: string,
    verifyPassword(password:string): boolean
}

let UserSchema: Schema = new Schema({
    createdAt:{
        type:Date,
        default:Date.now   
    },
    username: {
        type:String,
        lowercase:true  
    },
    displayName: String,
    email: {
        type:String,
        lowercase:true
    },
    googleId: String,
    password: String
});

UserSchema.pre('save', function(next){
    var user = this;

    if(!this.createdAt) this.createdAt = Date.now;

    if(user.isModified('password')) {
        bcrypt.genSalt(10, function(err:any, salt:number){
            bcrypt.hash(user.password, salt, null, function(err:any, hash:string){
                if(err) return next(err);
                user.password = hash; 
                next();
            });
        });
    } else{
        return next();
    }
});

UserSchema.methods.verifyPassword = function(password:string){
    return bcrypt.compareSync(password, this.password);
}

const User = model<IUserDocument>('User', UserSchema);
export default User;

我的代码来源于此源http://brianflove.com/2016/10/04/typescript-declaring-mongoose-schema-model/ .

最佳答案

pregeneric method which parameter defaults to Document .如果不是这样,应该是:

UserSchema.pre<IUserDocument>('save', function(next){ ... });

关于javascript - 使用 Mongoose 模型设置 typescript ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50080665/

相关文章:

javascript - 隐藏的div出现在表格选项选择上

typescript - vue3中props的定义方式是什么(Typescript)

angular - (任何窗口).global = window;

mongodb - 在 MongoDB 中创建新元素时显示对象而不是 db-ref ObjectId

javascript - 如何让我的 TreeView 元素溢出超过父 div 的宽度?

javascript - 将变量匹配到 JSON 内容并返回数据

javascript - 设置在线测验计时器

casting - 类型断言和 TypeScript 中较新的 `as` 运算符之间有什么区别?

node.js - Mongoose 节省

javascript - 自动递增序列字段错误 - MongoDB、Mongoose