knex.js:Table 推断的 TypeScript 类型

knex.js: Table Infered TypeScript types

我正在玩 knex.js,我想尝试为我的表提供 TypeScript 支持。

关注这个http://knexjs.org/#typescript-support

我已尝试在任何地方添加这个简单的片段,但没有结果。

declare module 'knex/types/tables' {
 interface Tables {
    // This is same as specifying `knex<User>('users')`
    users: { id: string, name: string };
}

我试过:

有人成功了吗?我错过了什么?

我已将其与以下内容一起使用:

为您的自定义类型创建一个目录,(我做了 src/@types)并添加您所有的 .d.ts(也应该与标准 .ts 一起使用)

然后,在你的tsconfig.ts里面添加下面的compilerOptions

"typeRoots": ["./nodemodules/@types", "./src/@types"]

然后在您的自定义类型目录中为 knex 表创建声明文件,在我的例子中 src/@types/index.d.ts

import { knex } from 'knex';

import { User } from 'path/to/your/interfaces'

declare module 'knex/types/tables' {      
  interface Tables {
    users: User;
    users_composite: Knex.CompositeTableType<
      User,
      Pick<User, 'name'> & Partial<Pick<User, 'created_at' | 'updated_at'>>,
      Partial<Omit<User, 'id'>>
    >;
  }
}

注意:这只是来自官方knex的相同示例,请see了解更多信息

然后你可以使用推断类型:

const user = await db.from('users').first() // User || undefined
const user = await db.table('users').first() // User || undefined

...为了清楚起见,我的 db 变量只是作为 knex({...})see

导出到其他地方