我正在处理一个旧项目,我们希望将其迁移到Typescript。它具有以以下格式定义的模型:
import Sequelize from "sequelize";
class MyModel extends Sequelize.Model {
public static init(sequelize) {
const attributes = {
userId: {
type: Sequelize.INTEGER,
allowNull: false,
field: "user_id"
},
createdAt: {
type: Sequelize.DATE,
field: "created_at"
}
};
super.init(attributes, {
sequelize
});
}
}
export default MyModel;
我想将它们转换为打字稿,而不必更改使用者的界面。就是说,我想扩展Sequelize.Model
,并想定义一个public static init
方法。
我从Sequelize.Model
上的打字稿中得到以下错误
Type 'Model<any, any>' is not a constructor function type.
我所做的所有研究都指向使用Sequelize.define
定义模型。
这是一个遗留项目,我不想为了符合类型而重写所有模型,所以我想知道如何正确扩展Sequelize.Model
?
谢谢
答案 0 :(得分:1)
我自己只是在努力解决类似的问题,这似乎对我有用-
class MyModel extends Sequelize.Model {
public static initialize(sequelize) {
const attributes = {
userId: {
type: Sequelize.INTEGER,
allowNull: false,
field: "user_id"
},
createdAt: {
type: Sequelize.DATE,
field: "created_at"
}
};
return this.init(attributes, {
sequelize
});
}
}
请注意,我将静态方法重命名为“ initialize”而不是“ init”。
答案 1 :(得分:0)
尝试一下
public static init(sequelize) {
super.init.call(this,{
id: {
type: DataTypes.INTEGER.UNSIGNED,
autoIncrement: true,
primaryKey: true,
},
text: {
type: DataTypes.STRING(5000) // extra long length
}
}, {
sequelize: sequelize
});
}