猫鼬是删除类型的干扰

时间:2019-01-29 14:18:05

标签: node.js mongodb typescript express mongoose

我已经在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 TypeDocument & IUser,因此我在这里受到了一些干扰。我收到的错误是:

  

错误:(239,7)TS2322:类型'true'不能分配给类型'({{isDeleted:boolean):void;():boolean;}&false)| ({(is​​Deleted: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",

1 个答案:

答案 0 :(得分:1)

也许在设置isDeleted时可以尝试进行显式强制转换。

类似的东西:

<IUser>system.isDeleted = true