import { knex, Knex } from '../types'; import { clientConfig, User, Department, Article } from './common'; import { expectType, expectAssignable } from 'tsd'; const knexInstance = knex(clientConfig); declare module '../types/tables' { interface Tables { users_inferred: User; departments_inferred: Department; articles_inferred: Article; users_composite: Knex.CompositeTableType< User, { insert: 'insert' }, { update: 'update' } >; departments_composite: Knex.CompositeTableType< Department, { insert: 'insert' }, { update: 'update' } >; articles_composite: Knex.CompositeTableType< Article, { insert: 'insert' }, { update: 'update' } >; } } const main = async () => { // # Select: expectType(await knexInstance('users')); // This test (others similar to it) may seem useless but they are needed // to test for left-to-right inference issues eg: #3260 expectType(await knexInstance('users')); expectType(await knexInstance('users')); expectType(await knexInstance('users_inferred')); expectType(await knexInstance('users_composite')); expectType(await knexInstance('users').select('id')); expectType[]>(await knexInstance('users').select('id')); expectType[]>(await knexInstance('users_inferred').select('id')); expectType[]>(await knexInstance('users_composite').select('id')); expectType[]>( await knexInstance('users_inferred').select('id').select('age') ); expectType[]>( await knexInstance('users_composite').select('id').select('age') ); expectType[]>( await knexInstance('users_inferred').select('id', 'age') ); expectType[]>( await knexInstance('users_composite').select('id', 'age') ); expectType | undefined>( await knexInstance.first('id').from('users_inferred') ); expectType | undefined>( await knexInstance.first('id').from('users_composite') ); //These tests simply check if type work by showing that it does not throw syntax error knexInstance.schema.createTable('testTable',(table) => { table.foreign('fkey_three').references('non_exist.id').withKeyName('non_for1').deferrable('deferred'); table.foreign('fkey_threee').references('non_exist.id').deferrable('deferred').withKeyName('non_for2'); table.integer('num').references('non_exist.id').deferrable('immediate').withKeyName('non_for3'); table.integer('num').references('non_exist.id').withKeyName('non_for4').deferrable('deferred').onDelete('CASCADE'); table.integer('num').references('non_exist.id').withKeyName('non_for5').deferrable('deferred').onDelete('CASCADE'); table.integer('num').references('id').inTable('non_exist').withKeyName('non_for6').deferrable('deferred').onDelete('CASCADE'); table.integer('num').references('id').withKeyName('non_for7').deferrable('deferred').inTable('non_exist').onDelete('CASCADE'); table.integer('num').references('id').inTable('non_exist').onDelete('CASCADE').withKeyName('non_for6').deferrable('deferred'); table.integer('num').references('id').withKeyName('non_for7').onDelete('CASCADE').deferrable('deferred').inTable('non_exist'); expectType( table.integer('num').references('id').withKeyName('non_for7').onDelete('CASCADE') .index('idx') // this shouldn't break type in chain .deferrable('deferred').inTable('non_exist') ) }) };