Я реализовал функцию мягкого удаления в моих коллекциях 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",