nestjs - 使用“类型支持”(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 的列。
解决方案
我通过在 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> {
}
推荐阅读
- python - 如何在每次调用 ```keras.layers.RNN``` 后重置自定义 RNN 单元的退出掩码?
- python - 如何在 Python C API 中创建枚举对象?
- gtk3 - Gtk vala css 预期标识符
- asp.net-core-webapi - 创建asp.net core web api时如何用数据加载缓存层?
- laravel - Laravel 内连接与两个空列值
- sql-server - SQL 命令:在命令中重复输入
- javascript - React Native Gifted Chat 阅读更多选项
- android - 在 Android 中运行检测测试时如何捕获活动中的错误?
- javascript - 在雪花中安排任务的问题
- node.js - android模拟器不适用于反应本机cli