首页 > 解决方案 > 使用“类型支持”(NestJS)在 Sequelize 中使用一些默认列扩展基类

问题描述

我有一个带有 updated_at、created_at 列等的 Sequelize 基类。我想扩展上面的基类以避免在每个模型中编写重复的列。我也想有打字支持(显示列名)。

当前实施。

具有打字支持的 BaseClass

export type ModelAttrs<T> = Omit<T, keyof Model>


export default class BaseModel<T> extends Model<ModelAttrs<T>, Partial<ModelAttrs<T>>> {
}

这将有助于显示基类下的列。

DefaultColumnsBaseClass


export default class DefaultValuesModel extends BaseModel<DefaultValuesModel> {

  @Column({
    type: DataType.DATE,
    defaultValue: DataType.NOW,
  })
  created_at: Date;

  @Column({
    type: DataType.DATE,
    defaultValue: DataType.NOW,
  })
  updated_at: Date;

  @Column({
    type: DataType.BOOLEAN,
    defaultValue: false,
  })
  is_deleted: Boolean;

  @Column({
    type: DataType.DATE,
    defaultValue: DataType.NOW,
  })
  deleted_at: Date;

}

我想要做的是,我想User class by extending DefaultValuesModel使用来自 UserModel 和 DefaultValuesModel 类的类型支持来创建。所以基本上 UserModel 应该显示来自 UserModel 和 DefaultValuesModel 的列。

标签: nestjssequelize-typescript

解决方案


我通过在 Type 本身中引用 DefaultValuesModel 来更新 BaseModel。


export type ModelAttrs<T> = Omit<T, keyof Model> & Omit<DefaultValuesModel, keyof Model>

export default class BaseModel<T> extends Model<ModelAttrs<T>, Partial<ModelAttrs<T>>> {
}

现在我可以扩展 BaseClass 以获得类型支持和默认列支持。

export default class UserIdentityModel extends BaseModel<UserIdentityModel> {
}

推荐阅读