как использовать это внутри мангуста userchema.methods в машинописном тексте

Я использую mongoose с typescript и jsonwebtoken для создания API для входа в систему. я новичок в машинописи. в user.model я не могу получить доступ к любому свойству схемы, используя этот метод. например, user.methods дает мне ошибку компиляции «Токены свойства» не существуют для типа «Документ».ts(2339).

export interface IUser extends Document {
    name:string,
    email: string;
    password: string;
    tokens: {token: string}[],
    encryptPassword(password:string): Promise<string>;
    validatePassword(password:String): Promise<boolean>;
}
const userSchema  = new Schema({
    name: {
        type: String,
        required: true,
        trim: true
    },
    email: {
        type: String,
        unique: true,
        required: true
    },
    password:{
        type:String,
        required: true,
        minlength: 5,
        trim: true
    },
    tokens: [{
        token: {
            type: String,
            required: true
        }
    }]
})
userSchema.methods.generateAuthToken = async function () {
    const user = this
    const token = jwt.sign({_id: user._id.toString() }, "thisismysecretkey")
    user.tokens  = this.tokens.concat({token})
}

Здесь, в userSchema.generateAuthToken, я получаю, что «токены» свойства не существуют для типа «Документ», когда я использую user.tokens или this.tokens. Пожалуйста, скажите мне, что я делаю неправильно. Спасибо заранее


person rakesht    schedule 13.01.2021    source источник


Ответы (1)


Попробуйте указать явный параметр this. Дополнительные сведения см. в разделе этих параметров.

import { Schema, Document } from 'mongoose';

export interface IUser extends Document {
  name: string;
  email: string;
  password: string;
  tokens: { token: string }[];
  encryptPassword(password: string): Promise<string>;
  validatePassword(password: String): Promise<boolean>;
}
const userSchema = new Schema({
  name: {
    type: String,
    required: true,
    trim: true,
  },
  email: {
    type: String,
    unique: true,
    required: true,
  },
  password: {
    type: String,
    required: true,
    minlength: 5,
    trim: true,
  },
  tokens: [
    {
      token: {
        type: String,
        required: true,
      },
    },
  ],
});
userSchema.methods.generateAuthToken = async function (this: IUser) {
  const user = this;
  const token = user._id.toString() + 'thisismysecretkey';
  user.tokens = this.tokens.concat({ token });
};

версии пакета:

"mongoose": "^5.11.9",
"typescript": "^3.7.2"
person slideshowp2    schedule 14.01.2021