import { knex, Knex } from '../types'; import { expectType } from 'tsd'; const clientConfig = { client: 'sqlite3', connection: { filename: './mydb.sqlite', }, }; const knexInstance = knex(clientConfig); const knex2 = knex({ ...clientConfig, log: { debug(msg: string) { // }, }, pool: { log: (msg: string, level: string) => { // }, }, }); knexInstance.initialize(); knexInstance.initialize({}); interface User { id: number; age: number; name: string; active: boolean; departmentId: number; } interface Department { id: number; departmentName: string; } interface Article { id: number; subject: string; body?: string; authorId?: string; } interface Ticket { name: string; from: string; to: string; at: Date; } const main = async () => { { const r = await knexInstance('users').insert({ id: 10 }, 'id'); // $ExpectType Pick[] expectType>>(r); } { const r = await knexInstance('users').insert({ id: 10 }, '*'); // $ExpectType User[] expectType(r); } { const r = await knexInstance('users_inferred').insert({ id: 10 }, '*'); // $ExpectType User[] expectType(r); } // $ExpectError in original code: not valid for 'users_composite' // await knexInstance('users_composite').insert({ id: 10 }, '*'); // await knexInstance('users_composite').insert({}, '*'); { const r = await knexInstance('users_composite').insert( { insert: 'insert' }, '*' ); // $ExpectType User[] expectType(r); } { const r = await knexInstance('users').insert([{ id: 10 }], '*'); // $ExpectType User[] expectType(r); } { const r = await knexInstance('users_inferred').insert([{ id: 10 }], '*'); // $ExpectType User[] expectType(r); } // $ExpectError in original code // await knexInstance('users_composite').insert([{ id: 10 }], '*'); // await knexInstance('users_composite').insert([{}], '*'); { const r = await knexInstance('users_composite').insert( [{ insert: 'insert' }], '*' ); // $ExpectType User[] expectType(r); } { const r = await knexInstance.insert({ id: 10 }, 'id').into('users'); // $ExpectType Pick[] expectType>>(r); } { const r = await knexInstance .insert({ id: 10 }, 'id') .into('users_inferred'); // $ExpectType Pick[] expectType>>(r); } { const r = await knexInstance .insert({ insert: 'insert' }, 'id') .into('users_composite'); // $ExpectType Pick[] expectType>>(r); } { const r = await knexInstance('users') .insert({ id: 10 }) .returning(['id', 'age']); // $ExpectType Pick[] expectType>>(r); } { const r = await knexInstance('users_inferred') .insert({ id: 10 }) .returning(['id', 'age']); // $ExpectType Pick[] expectType>>(r); } // $ExpectError in original code // await knexInstance('users_composite').insert({ id: 10 }).returning(['id', 'age']); // await knexInstance('users_composite').insert({}).returning(['id', 'age']); { const r = await knexInstance('users_composite') .insert({ insert: 'insert' }) .returning(['id', 'age']); // $ExpectType Pick[] expectType>>(r); } { const r = await knexInstance('users') .insert({ id: 10 }, 'id') .returning(['id', 'age']); // $ExpectType Pick[] expectType>>(r); } { const r = await knexInstance('users_inferred') .insert({ id: 10 }, 'id') .returning(['id', 'age']); // $ExpectType Pick[] expectType>>(r); } // $ExpectError in original code // await knexInstance('users_composite').insert({ id: 10 }, 'id').returning(['id', 'age']); // await knexInstance('users_composite').insert({}, 'id').returning(['id', 'age']); { const r = await knexInstance('users_composite') .insert({ insert: 'insert' }, 'id') .returning(['id', 'age']); // $ExpectType Pick[] expectType>>(r); } { const r = await knexInstance('users').insert({ id: 10 }).returning('*'); // $ExpectType any[] expectType(r); } { const r = await knexInstance('users') .insert({ id: 10 }) .returning('*'); // $ExpectType User[] expectType(r); } { const r = await knexInstance('users_inferred') .insert({ id: 10 }) .returning('*'); // $ExpectType User[] expectType(r); } // $ExpectError in original code // await knexInstance('users_composite').insert({ id: 10 }).returning('*'); // await knexInstance('users_composite').insert({}).returning('*'); { const r = await knexInstance('users_composite') .insert({ insert: 'insert' }) .returning('*'); // $ExpectType User[] expectType(r); } { const r = await knexInstance .insert({ id: 10 }) .into('users') .returning('*'); // $ExpectType any[] expectType(r); } { const r = await knexInstance .insert({ id: 10 }) .into('users') .returning('*'); // $ExpectType User[] expectType(r); } { const r = await knexInstance .insert({ id: 10 }) .into('users_inferred') .returning('*'); // $ExpectType User[] expectType(r); } { const r = await knexInstance .insert({ insert: 'insert' }) .into('users_composite') .returning('*'); // $ExpectType User[] expectType(r); } { const r = await knexInstance .insert({ id: 10 }) .returning('*') .into('users'); // $ExpectType User[] expectType(r); } { const r = await knexInstance .insert({ id: 10 }) .returning('*') .into('users_inferred'); // $ExpectType User[] expectType(r); } { const r = await knexInstance .insert({ id: 10 }) .returning('*') .into('users_composite'); // $ExpectType User[] expectType(r); } { const r = await knexInstance('users') .insert({ id: 10 }, 'id') .returning('*'); // $ExpectType User[] expectType(r); } { const r = await knexInstance('users_inferred') .insert({ id: 10 }, 'id') .returning('*'); // $ExpectType User[] expectType(r); } // $ExpectError in original code // await knexInstance('users_composite').insert({ id: 10 }, 'id').returning('*'); // await knexInstance('users_composite').insert({}, 'id').returning('*'); { const r = await knexInstance('users_composite') .insert({ insert: 'insert' }, 'id') .returning('*'); // $ExpectType User[] expectType(r); } { const r = await knexInstance .insert({ id: 10 }) .returning(['id', 'age']) .into('users'); // $ExpectType Pick[] expectType>>(r); } { const r = await knexInstance .insert({ id: 10 }) .returning(['id', 'age']) .into('users_inferred'); // $ExpectType Pick[] expectType>>(r); } { const r = await knexInstance .insert({ id: 10 }) .returning(['id', 'age']) .into('users_composite'); // $ExpectType Pick[] expectType>>(r); } { const r = await knexInstance('users') .insert({ id: 10 }) .returning(['id', 'age']); // $ExpectType any[] expectType(r); } // # Update { const r = await knexInstance('users') .where('id', 10) .update({ active: true }); // $ExpectType number expectType(r); } { const qb1 = knexInstance('users').where('id', 10); qb1.returning(['id', 'name']); const r = await qb1.update[]>({ active: true }); // $ExpectType Partial[] expectType>>(r); } { const r = await knexInstance('users') .where('id', 10) .update({ active: true }); // $ExpectType number expectType(r); } { const r = await knexInstance('users_inferred') .where('id', 10) .update({ active: true }); // $ExpectType number expectType(r); } { const r = await knexInstance('users_composite') .where('id', 10) .update({ update: 'update' }); // $ExpectType number expectType(r); } // $ExpectError in original code // await knexInstance('users_composite').update({ id: 10 }); // await knexInstance('users_composite').update({}); { const r = await knexInstance .where('id', 10) .update({ active: true }) .from('users'); // $ExpectType number expectType(r); } // ## With Returning { const r = await knexInstance('users') .where('id', 10) .update({ active: true }) .returning(['id', 'age']); // $ExpectType any[] expectType(r); } { const r = await knexInstance('users') .where('id', 10) .update({ active: true }) .returning('*'); // $ExpectType any[] expectType(r); } { const r = await knexInstance('users') .where('id', 10) .update({ active: true }) .returning('*'); // $ExpectType User[] expectType(r); } { const r = await knexInstance('users_inferred') .where('id', 10) .update({ active: true }) .returning('*'); // $ExpectType User[] expectType(r); } // $ExpectError in original code // await knexInstance('users_composite').where('id', 10).update({}).returning('*'); { const r = await knexInstance('users_composite') .where('id', 10) .update({ update: 'update' }) .returning('*'); // $ExpectType User[] expectType(r); } { const r = await knexInstance .where('id', 10) .update({ active: true }) .returning('*') .from('users'); // $ExpectType any[] expectType(r); } { const r = await knexInstance .where('id', 10) .update({ active: true }) .returning('*') .from('users'); // $ExpectType User[] expectType(r); } { const r = await knexInstance .where('id', 10) .update({ active: true }) .returning('*') .from('users_inferred'); // $ExpectType User[] expectType(r); } { const r = await knexInstance .where('id', 10) .update({ update: 'update' }) .returning('*') .from('users_composite'); // $ExpectType User[] expectType(r); } { const r = await knexInstance('users') .where('id', 10) .update({ active: true }) .returning(['id', 'age']); // $ExpectType Pick[] expectType>>(r); } { const r = await knexInstance('users_inferred') .where('id', 10) .update({ active: true }) .returning(['id', 'age']); // $ExpectType Pick[] expectType>>(r); } { const r = await knexInstance('users_composite') .where('id', 10) .update({ update: 'update' }) .returning(['id', 'age']); // $ExpectType Pick[] expectType>>(r); } // $ExpectError in original code // await knexInstance('users_composite').where('id', 10).update({ id: 11 }).returning(['id', 'age']); // await knexInstance('users_composite').where('id', 10).update({}).returning(['id', 'age']); { const r = await knexInstance('users') .where('id', 10) .update({ active: true }, 'id'); // $ExpectType Pick[] expectType>>(r); } { const r = await knexInstance('users_inferred') .where('id', 10) .update({ active: true }, 'id'); // $ExpectType Pick[] expectType>>(r); } { const r = await knexInstance('users_composite') .where('id', 10) .update({ update: 'update' }, 'id'); // $ExpectType Pick[] expectType>>(r); } // $ExpectError in original code // await knexInstance('users_composite').where('id', 10).update({ id: 11 }, 'id'); // await knexInstance('users_composite').where('id', 10).update({}, 'id'); { const r = await knexInstance('users') .where('id', 10) .update('active', true, 'id'); // $ExpectType Pick[] expectType>>(r); } { const r = await knexInstance('users_inferred') .where('id', 10) .update('active', true, 'id'); // $ExpectType Pick[] expectType>>(r); } { const r = await knexInstance('users_composite') .where('id', 10) .update('update', 'update', 'id'); // $ExpectType Pick[] expectType>>(r); } { const r = await knexInstance('users') .where('id', 10) .update({ active: true }, ['id', 'age']); // $ExpectType Pick[] expectType>>(r); } { const r = await knexInstance('users_inferred') .where('id', 10) .update({ active: true }, ['id', 'age']); // $ExpectType Pick[] expectType>>(r); } { const r = await knexInstance('users_composite') .where('id', 10) .update({ update: 'update' }, ['id', 'age']); // $ExpectType Pick[] expectType>>(r); } // $ExpectError in original code // await knexInstance('users_composite').where('id', 10).update({ id: 11 }, ['id', 'age']); // await knexInstance('users_composite').where('id', 10).update({}, ['id', 'age']); { const r = await knexInstance('users') .where('id', 10) .update('active', true, ['id', 'age']); // $ExpectType Pick[] expectType>>(r); } { const r = await knexInstance('users_inferred') .where('id', 10) .update('active', true, ['id', 'age']); // $ExpectType Pick[] expectType>>(r); } { const r = await knexInstance('users_composite') .where('id', 10) .update('update', 'update', ['id', 'age']); // $ExpectType Pick[] expectType>>(r); } }; class ExcelClient extends knex.Client {}