From b9ed0ab5b32d75f52a6f881997f2babf72257c22 Mon Sep 17 00:00:00 2001 From: Felix Mosheev <9304194+felixmosh@users.noreply.github.com> Date: Wed, 21 Apr 2021 12:47:56 +0300 Subject: [PATCH] feat: Add columns names & types inference --- __tests-tsd__/types.test-d.ts | 19 +++++++++++-------- types.d.ts | 9 +++++++-- 2 files changed, 18 insertions(+), 10 deletions(-) diff --git a/__tests-tsd__/types.test-d.ts b/__tests-tsd__/types.test-d.ts index 6fa2a96..6d47b8a 100644 --- a/__tests-tsd__/types.test-d.ts +++ b/__tests-tsd__/types.test-d.ts @@ -4,13 +4,16 @@ import '../types'; const db = knex({}); (async () => { - await db('table').select('*').onDuplicateUpdate('name', 'column2'); + await db('table').insert({ id: 1, name: 'test' }).onDuplicateUpdate('name', 'column2'); - await db('table').select('*').onDuplicateUpdate({ name: 'new name' }, 'xx'); - await db('table').select('*').onDuplicateUpdate({ - name: db.raw('Concat(name, "_test")'), - numericCol: 2, - nullCol: null, - dateCol: new Date() - }); + await db('table').insert({ id: 1, name: 'test' }).onDuplicateUpdate({ name: 'new name' }, 'xx'); + await db<{ id: number; name: string }>('table') + .insert({ id: 1, name: 'test' }) + .onDuplicateUpdate({ + name: db.raw('Concat(name, "_test")'), + }); + + const response = await db<{ id: number; name: string }>('table') + .insert({ id: 1, name: 'bla' }) + .onDuplicateUpdate('name', 'id', { name: db.raw('Concat(name, "_test")') }); })(); diff --git a/types.d.ts b/types.d.ts index b72c4ee..de9cb83 100644 --- a/types.d.ts +++ b/types.d.ts @@ -2,8 +2,13 @@ import { Knex } from 'knex'; declare module 'knex' { namespace Knex { - interface QueryBuilder { - onDuplicateUpdate(...columnNames: Array<{ [key: string]: any } | string>): Knex.QueryBuilder; + interface QueryBuilder { + onDuplicateUpdate( + ...columnNames: Array< + | Knex.DbRecord> + | keyof TRecord + > + ): Knex.QueryBuilder; } } }