我正在开发一个使用knex进行数据库连接的项目。我也使用流量进行打字。我尝试按如下方式连接数据库:
const db = knex({
client: 'mysql',
connection: {
host: containerized() ? 'database' : process.env.DB_URL || 'localhost',
user: process.env.DB_USER || 'user',
password: process.env.DB_PASSWORD || 'password',
database: process.env.DB_DATABASE || 'database',
},
});
其中db的类型为Knex$Knex
。我尝试使用以下方式设置数据库:
export function init(): Promise<Knex$Knex<*>> {
return new Promise((resolve, reject) => {
PromiseReduce([
() => db.schema.hasTable('users').then((exists) => {
if (!exists) {
return db.schema.createTable('users', (table) => {
...
});
}
return null;
}),
...
]).then(resolve).catch(reject);
}).then(() => db);
}
这一切在它运行时都有效,但是流量错误,说db.schema
不是Knex$Knex
的属性;并且查看类型声明,情况就是这样。有没有一个首选方法来执行此操作,还是仅仅是流声明错误的情况?
答案 0 :(得分:0)
这是因为knex v0.14.x的流式类型定义不包括模式的类型。
通过将schema: Object
添加到Knex$Knex<R>
类的声明中,可以在本地快速修复错误。
对此问题的修复需要正确键入knex的架构并将其添加到流式存储库中。