我正在使用 Sequelize 作为数据 ORM。
我有一个简单的用户类。
import { Model } from "sequelize";
class User extends BaseModel {
}
export default User;
我可以像这样使用用户类 User.findByPk(1)
Sequelize findByPk
我想要的是一个 BaseModel 类,它将扩展 Sequelize Model
类,以便我可以在 BaseClass 中放置一些常用方法。
例如:我不想使用 findByPk
,而是想在 BaseModel 中定义 find
方法,它将调用 Inherited 类上的 findByPk
,但我找不到任何解决方案来在父类中获取子引用。
类似于 PHP 中的 static
。
最佳答案
这里是你如何做到的:
抽象(父)类:
import { Model } from "sequelize";
export default abstract class BaseModel <T,U>
extends Model<T,U>
{
protected myMethod(){}
}
用户(子)类:
import { DataTypes, Model, Optional } from 'sequelize'
import { sequelizeConnection } from "../helpers/databaseHelper"
import BaseModel from "../models/BaseModel";
interface UserAttributes {
id: number;
createdAt?: Date;
updatedAt?: Date;
deletedAt?: Date;
}
export interface UserInput extends Optional<UserAttributes, "id"> {}
export default
class User<T=UserAttributes,U=UserInput> // <-- Pass the same generic construction as AbstractModel
extends BaseModel <T,U> // <-- Here the trick
implements UserAttributes{
public id!: number;
public name!: string;
// timestamps!
public readonly createdAt!: Date;
public readonly updatedAt!: Date;
public readonly deletedAt!: Date;
}
User.init({
id: {
type: DataTypes.UUID,
defaultValue: DataTypes.UUIDV4,
primaryKey: true,
},
// Your attributes
},
{
timestamps: true,
sequelize: sequelizeConnection,
paranoid: true
})
关于javascript - 为 Sequelize 创建中间 BaseModel 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66821909/