Мангуст isDeleted тип вмешательства - PullRequest
0 голосов
/ 29 января 2019

Я реализовал функцию мягкого удаления в моих коллекциях MongoDB.Теперь у меня возникают проблемы, когда я хочу обновить версию библиотеки mongoose с 4 до 5. Проблема в том, что версия 5.xy библиотеки mongoose сама поддерживает функцию мягкого удаления (с методом isDeleted()), которая мешает моей собственной isDeleted поле.

У меня есть что-то вроде этого:

export class Factory<E> {
  private readonly _model: Model<Document & E>;

  public get model(): Model<Document & E> {
    return this._model;
  }

  constructor(config: IFactoryConfiguration) {
    // ...
    let schema: Schema = new Schema(this.definition);
    this._model = this.connection.model<Document & E>(this.name, schema);
  }
}

Тогда у меня есть:

export class UserFactory extends Factory<IUser> {
  constructor(connection: Connection) {
    super({
      connection: connection,
      name: 'User',
      definition: UserSchema
    });
  }
}

И:

export const UserSchema: SchemaDefinition = {
  // ...
  isDeleted: {
    type: Boolean,
    default: false
  } // ...
}

IUser имеет isDeleted: boolean; свойство среди других.

Теперь я хочу создавать / обновлять системного пользователя при каждом запуске сервера:

let system = await this.factories.user.model.findOne({
  'isSystem': true
});

if (!system) {
  system = new this.factories.user.model();
  system.isSystem = true;
  system.isDeleted = true; <-- error here
  await system.save();
}

Проблема в том, что у меня isDeletedсвойство внутри модели моей коллекции (в данном случае IUser), но у mongoose есть метод isDeleted() внутри класса Document.Так как у меня Тип пересечения из Document & IUser, я получаю некоторые помехи здесь.Я получаю следующую ошибку:

Ошибка: (239, 7) TS2322: тип 'true' нельзя назначить типу '({(isDeleted: boolean): void; (): boolean;} & false) |({(isDeleted: boolean): void; (): boolean;} & true) '.

Поскольку существует метод isDeleted(): boolean; (посмотрите здесь ).Как я могу решить эту проблему?

В частности, я хочу обновить с

"mongoose": "^4.13.17",
"@types/mongoose": "^4.7.23",

до

"mongoose": "^5.4.7",
"@types/mongoose": "^5.3.10",

Я использую

"typescript": "^3.2.2",

1 Ответ

0 голосов
/ 31 января 2019

Может быть, вы можете попробовать явное приведение при установке isDeleted.

Что-то вроде:

<IUser>system.isDeleted = true
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...