const _ = require('lodash');
const fs = require('fs');
const path = require('path');
const pg = require('pg');
require('pg-parse-float')(pg);
const Sequelize = require('sequelize');
interface ImportedModel {
name: string
}
export function models () {
const dbOptions = {
dialect: 'postgres',
protocol: 'postgres',
logging: false,
// logging: console.log,
dialectOptions: {
ssl: false // TODO: Need to set ssl to true
}
};
const dbUrl = process.env.DB_URL;
const sequelize = new Sequelize(dbUrl, dbOptions);
let db: Object = {};
const modelPath = `${process.cwd()}/models`;
fs.readdirSync(modelPath).forEach((file: String) => {
if (file !== 'index.js' && path.extname(file) === '.js') {
let model: ImportedModel = sequelize.import(path.join(modelPath, file));
db[model.name] = model;
}
});
Object.keys(db).forEach((modelName: String) => {
if ('associate' in db[modelName]) {
db[modelName].associate(db);
}
});
return _.assign(db, {
sequelize: sequelize,
Sequelize: Sequelize
});
}
具体来说,db[model.name] = model;
有一个Typescript错误:
[ts] Element implicitly has an 'any' type because type 'Object' has no index signature.
我该如何解决这个问题?
答案 0 :(得分:0)
通过添加界面解决:
interface DbModel {
[key: string]: any
}
并将我的代码更改为:
let db: DbModel = {}
const modelPath = `${process.cwd()}/models`
fs.readdirSync(modelPath).forEach((file: String) => {
if (file !== 'index.js' && path.extname(file) === '.js') {
let model: ImportedModel = sequelize.import(path.join(modelPath, file))
db[model.name] = model
}
})
Object.keys(db).forEach((modelName: string) => {
if ('associate' in db[modelName]) {
db[modelName].associate(db)
}
})