猫鼬实例方法在VSCode中的实例(文档)上不存在

时间:2019-02-03 06:43:34

标签: mongodb typescript mongoose mongoose-schema

我在使用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/

0 个答案:

没有答案