我已经在MongoDB集合中实现了软删除功能。现在,当我想将猫鼬库的版本从4更新到5时遇到问题。问题是猫鼬库的5.xy版本本身支持软删除功能(具有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
属性,但是猫鼬的isDeleted()
类中有Document
方法。由于我的Intersection Type为Document & IUser
,因此我在这里受到了一些干扰。我收到的错误是:
错误:(239,7)TS2322:类型'true'不能分配给类型'({{isDeleted:boolean):void;():boolean;}&false)| ({(isDeleted:boolean):void;():boolean;}和true)”。
因为有isDeleted(): boolean;
方法(请看here)。我该如何解决这个问题?
具体来说,我想更新
"mongoose": "^4.13.17",
"@types/mongoose": "^4.7.23",
到
"mongoose": "^5.4.7",
"@types/mongoose": "^5.3.10",
我正在使用
"typescript": "^3.2.2",
答案 0 :(得分:1)
也许在设置isDeleted
时可以尝试进行显式强制转换。
类似的东西:
<IUser>system.isDeleted = true