diff --git a/test-tsd/types.test-d.ts b/test-tsd/types.test-d.ts index 0732e6ffbd..6e639c6d08 100644 --- a/test-tsd/types.test-d.ts +++ b/test-tsd/types.test-d.ts @@ -19,6 +19,18 @@ expectType>(knexCjsImport.knex({})); expectType(new knex.KnexTimeoutError()); expectType(new knex.KnexTimeoutError()); +// Knex instances need to be assigned first so their generic types aren't inferred +const k1 = knex({}); +expectAssignable(k1); +const k2 = knexStar.default({}); +expectAssignable(k2); +const k3 = knexStar.knex({}); +expectAssignable(k3); +const k4 = knexCjsImport.default({}); +expectAssignable(k4); +const k5 = knexCjsImport.knex({}); +expectAssignable(k5); + // eslint-disable-next-line expectType(knexCjs({})); // eslint-disable-next-line diff --git a/types/index.d.ts b/types/index.d.ts index daccda0ccf..c4a8d8e02a 100644 --- a/types/index.d.ts +++ b/types/index.d.ts @@ -328,7 +328,7 @@ interface DMLOptions { includeTriggerModifications?: boolean; } -export interface Knex[]> +export interface Knex extends Knex.QueryInterface, events.EventEmitter { ( tableName: TTable, diff --git a/types/test.ts b/types/test.ts index 9b086b9e03..553c8589c8 100644 --- a/types/test.ts +++ b/types/test.ts @@ -82,6 +82,9 @@ type _T8 = ExtendsWitness, Knex.QueryBuilder>; type _T9 = ExtendsWitness, Knex.QueryBuilder>; type _T10 = ExtendsWitness, Knex.QueryBuilder>; +// Ensure the return type of knex() is compatible with Knex with default parameters +type _T2_1 = ExtendsWitness; + declare module './tables' { interface Tables { users_inferred: User;