Flow无法在knex上找到schema属性

时间:2018-05-14 12:47:22

标签: javascript flowtype knex.js

我正在开发一个使用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的属性;并且查看类型声明,情况就是这样。有没有一个首选方法来执行此操作,还是仅仅是流声明错误的情况?

1 个答案:

答案 0 :(得分:0)

这是因为knex v0.14.x的流式类型定义不包括模式的类型。

通过将schema: Object添加到Knex$Knex<R>类的声明中,可以在本地快速修复错误。

对此问题的修复需要正确键入knex的架构并将其添加到流式存储库中。