Я использую 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/