Skip to content

Instantly share code, notes, and snippets.

@JPBM135
Created December 5, 2024 20:02
Show Gist options
  • Save JPBM135/2077fe900c7f7c103fc3eda3d5581951 to your computer and use it in GitHub Desktop.
Save JPBM135/2077fe900c7f7c103fc3eda3d5581951 to your computer and use it in GitHub Desktop.
Knex and Pg-to-Ts integration
import type { Knex } from 'knex';
import type { TableTypes } from '../../generated/database.types.js';
type SelectTableType<K extends keyof TableTypes> = TableTypes[K]['select'] & {
[P in Exclude<keyof TableTypes[K]['select'], symbol> as `${K}.${P}`]: TableTypes[K]['select'][P];
};
type InsertTableType<K extends keyof TableTypes> = TableTypes[K]['input'];
type UpdateTableType<K extends keyof TableTypes> = Partial<Exclude<TableTypes[K]['input'], 'id'>>;
type PgToTsTablesTypesToKnexTypes = {
[K in keyof TableTypes]: Knex.CompositeTableType<
SelectTableType<K>,
InsertTableType<K>,
UpdateTableType<K>
>;
};
declare module 'knex/types/tables.d.ts' {
interface Tables extends PgToTsTablesTypesToKnexTypes {}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment