【发布时间】:2017-05-30 11:41:49
【问题描述】:
我正在处理一个 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;
};
但是,我无法将模型从一个文件导入另一个文件,无法执行以下操作:
import * as User from './user'
// ...
// definition of job model
// ...
Job.hasOne(User);
当我得到Argument of type 'typeof "~/models/job-response"' is not assignable to parameter of type 'Model<any, any>'. 然后:
~/node_modules\sequelize\lib\associations\mixin.js:95 [1] throw new Error(this.name + '.' + Utils.lowercaseFirst(Type.toString()) + ' 调用的东西不是 Sequelize.Model 的实例'); [1] ^ [1] [1] 错误:Job.function (srcModel, targetModel, options) { [1] 协会.call(this); [1] [1] } 调用的东西不是 Sequelize.Model 的实例 [1] 在 Model.hasOne (~\node_modules\sequelize\lib\associations\mixin.js:95:13)
我应该如何访问模型实例,以便将其传递给 hasMany() 或 hasOne() 函数。
【问题讨论】:
标签: node.js typescript sequelize.js