使用猫鼬模型设置打字稿
Posted
技术标签:
【中文标题】使用猫鼬模型设置打字稿【英文标题】:Setting up typescript with mongoose model 【发布时间】:2018-10-09 09:03:19 【问题描述】:出于某种原因,打字稿不接受我的代码。在UserScema.pre
方法中,打字稿错误表明属性createdAt
和password
在类型文档(this
) 上不存在。如何使 typescript 接口应用于此方法并返回 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/。
【问题讨论】:
【参考方案1】:pre
是 generic method which parameter defaults to Document
。如果不是这样,它应该是:
UserSchema.pre<IUserDocument>('save', function(next) ... );
【讨论】:
谢谢,这正是解决办法。以上是关于使用猫鼬模型设置打字稿的主要内容,如果未能解决你的问题,请参考以下文章