Flow 在 knex 上找不到架构 属性

Flow cannot find schema property on knex

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

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

通过在 Knex$Knex<R> class.

的声明中添加 schema: Object 可以在本地快速修复错误

要解决此问题,需要正确键入 knex 的架构并将其添加到流类型存储库中。