使用 Typescript 在 Sequelize 模型中创建实例方法

Sha*_*ech 7 model node.js sequelize.js typescript

我想扩展 Sequelize Model 类以添加其他实例方法,但打字稿不断抱怨“类型‘模型’上不存在属性‘原型’”

const MyModel = (sequelize: Sequelize.Sequelize, dataTypes: Sequelize.DataTypes) => {
  const User = sequelize.define<Instance, Attribute>(
    "users",
    {
      id: {
        type: dataTypes.INTEGER,
        primaryKey: true,
        autoIncrement: true,
      },
      email: {
        type: dataTypes.STRING
      },
      ...
    },
    {
      tableName: "users",
      ...
    },
  );

  User.prototype.verifyUser = function(password: string) {
    ...
  };

  return User;
};
Run Code Online (Sandbox Code Playgroud)

我希望User.prototype.verifyUser能工作,但打字稿抱怨。如何添加到打字?

Sha*_*ech 1

我见过的一种解决方案是在声明模型后强制输入。所以

interface UserModelInstanceMethods extends Sequelize.Model<Instance, Attributes> {
  prototype: {
    verifyPassword: (password: string) => Promise<boolean>;
  };
}

const MyModel = (sequelize: Sequelize.Sequelize, dataTypes: Sequelize.DataTypes) => {
  const User = sequelize.define<Instance, Attribute>(
    "users",
    {
      id: {
        type: dataTypes.INTEGER,
        primaryKey: true,
        autoIncrement: true,
      },
      email: {
        type: dataTypes.STRING
      },
      ...
    },
    {
      tableName: "users",
      ...
    },
  );

  User.prototype.verifyUser = function(password: string) {
    ...
  };

  return User;
} as Sequelize.Model<Instance, Attributes> & UserModelInstanceMethods;
Run Code Online (Sandbox Code Playgroud)