我有一个Sequelize基类,包含updated_at、created_at列等。我想扩展上面的基类,以避免在每个模型中写入重复的列。我也希望有打字支持(显示列名(。
当前实施。
支持打字的BaseClass
export type ModelAttrs<T> = Omit<T, keyof Model>
export default class BaseModel<T> extends Model<ModelAttrs<T>, Partial<ModelAttrs<T>>> {
}
这将有助于显示基类下的列。
默认列基本类
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;
}
我想做的是,我想创建具有UserModel和DefaultValuesModel类的类型支持的User class by extending DefaultValuesModel
。因此,基本上UserModel应该显示UserModel和DefaultValuesModel中的列。
我通过引用类型本身中的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> {
}