Как определить статические методы mongoose в интерфейсе документа при использовании @ nestjs / mongoose? - PullRequest
0 голосов
/ 04 сентября 2018

Класс Мангуста Схема Схема пользователя коллекции Mongoose

const UserSchema = new Schema({
  firstName: {
    type: String,
    required: true,
  },
  lastName: {
    type: String,
    required: true,
  },
  gender: {
    type: String,
    enum: Object.keys(GenderType),
    required: true,
  },
});

UserSchema.methods = {

  fullName(): string {
    return `${this.firstName} ${this.lastName}`;
  },

};

UserSchema.statics = {

  someAction(): string {
    return '123';
  },

};

export default UserSchema;

Класс интерфейса документа

Класс интерфейса коллекции Mongoose

export interface IUser extends Document {

  _id: Types.ObjectId;
  firstName: string;
  lastName: string;
  gender: string;

  fullName: () => string;
}

Как определить статические методы Мангуста в интерфейсе документа при использовании @ nestjs / mongoose?

1 Ответ

0 голосов
/ 30 сентября 2018

В дополнение к IUser может потребоваться дополнительный интерфейс IUserModel и расширение его с Model<T>. Пример фрагмента может выглядеть следующим образом:

export interface IUserModel extends Model<IUser> {
     // Model is imported from mongoose
     // you can put your statics methods here
     someAction: () => string;
}

Затем, где бы вы ни вводили модель, используя @InjectModel(), вы можете ввести свой тип ввода IUserModel.

constructor(@InjectModel('UserModel') private readonly userModel: IUserModel) {}

Теперь ваш this.userModel будет иметь доступ к методу someAction().

Удачного кодирования!

...