Node.js 延续联想

Node.js 延续联想,node.js,typescript,sequelize.js,Node.js,Typescript,Sequelize.js,我正在从事一个Typescript Sequelize项目,其中我的/models/index.ts文件具有以下“导入此目录中的所有模型”功能: var basename = path.basename(module.filename); fs .readdirSync(__dirname) .filter(function (file) { return (file.indexOf('.') !== 0) && (file !== basenam

我正在从事一个Typescript Sequelize项目,其中我的
/models/index.ts
文件具有以下“导入此目录中的所有模型”功能:

var basename = path.basename(module.filename);
fs
    .readdirSync(__dirname)
    .filter(function (file) {
        return (file.indexOf('.') !== 0) && (file !== basename) && (file.slice(-3) === '.js');
    })
    .forEach(function (file) {
        console.log(file);
        var model = sequelize['import'](path.join(__dirname, file));
        console.log('here');
        // NOTE: you have to change from the original property notation to
        // index notation or tsc will complain about undefined property.
        db[model['name']] = model;
    });
然后,我有如下结构的模型
/models/user.ts

export default function defineUser(sequelize: Sequelize.Sequelize, DataTypes) {
  var User = sequelize.define<UserInstance, UserAttributes>('User', {
    email: {
      type: Sequelize.STRING,
      unique: true,
      validate: { isEmail: true }
    },
    password: Sequelize.STRING
  });
  return User;
};
当我得到
时,“~/models/job response”类型的参数不能分配给“Model”类型的参数。
然后:

~/node\u modules\sequelize\lib\associations\mixin.js:95 [1] 抛出新错误(this.name+'.+Utils.lowercaseFirst(Type.toString())+'调用的对象不是Sequelize.Model'); [1] ^ [1] [1] 错误:Job.function(srcModel、targetModel、options){ [1] 联系(这个); [1] [1] }调用的对象不是Sequelize.Model的实例 [1] 在Model.hasOne(~\node\u modules\sequelize\lib\associations\mixin.js:95:13)


如何访问模型实例,以便将其传递给
hasMany()
hasOne()
函数。

模型注册循环运行后,所有模型都将在
db.models
上可用,并按名称键入。因此,您可以在同一个文件或单独的文件中执行以下操作:

db.models.Job.hasOne(db.models.User)
我发现在一个单独的文件中定义关系很方便,因为如果您想定义关系的双方(即belongsTo/hasMany),那么无论如何都必须这样做(以避免循环依赖)

db.models.Job.hasOne(db.models.User)