在Typescript中对扩展模型类进行续集

时间:2018-12-23 12:00:02

标签: typescript sequelize.js

我正在处理一个旧项目,我们希望将其迁移到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

谢谢

2 个答案:

答案 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
    });
}