我在使用Typescript进行严格的类型检查(strictPropertyInitialization除外)。我有以下界面:
export interface User extends Document {
email: string;
password: string;
}
我有一个模式:
export const UserSchema: Schema = new Schema({
...
});
和一个实例方法:
UserSchema.methods.checkPassword = function(...){...};
当我尝试访问该实例方法时:
服务:
async findOneByEmail(email: string): Promise<User | null> {
const userModel = await this.userModel.findOne({ email }).exec();
return userModel;
}
尝试访问该方法:
const user = await this.usersService.findOneByEmail(email);
if (!user) throw new UnauthorizedException();
userToAttempt.checkPassword(...
这给了我一个错误[ts] Property 'checkPassword' does not exist on type 'User'.
但是如果我将其更改为user.schema.methods.checkPassword(
,那就太高兴了。我是否需要在界面中定义方法,以免成为一个因素?
编辑:到目前为止,我的解决方法是在接口中复制实例方法,我不太喜欢。
export interface User extends Document {
email: string;
password: string;
checkPassword(...): any;
}
我最终做了与本文类似的事情: https://brianflove.com/2016/10/04/typescript-declaring-mongoose-schema-model/