Update signature of orderBy to support QueryBuilder inside array (#3757)

Fixes #3738
This commit is contained in:
Lorefnon 2020-03-26 02:42:38 +05:30 committed by GitHub
parent 2fbe91da1a
commit c35a66d31b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 37 additions and 7 deletions

17
types/index.d.ts vendored
View File

@ -1215,21 +1215,24 @@ declare namespace Knex {
ColumnNameQueryBuilder<TRecord, TResult> {} ColumnNameQueryBuilder<TRecord, TResult> {}
interface OrderBy<TRecord = any, TResult = unknown[]> { interface OrderBy<TRecord = any, TResult = unknown[]> {
(columnName: keyof TRecord, order?: 'asc' | 'desc'): QueryBuilder< (columnName: keyof TRecord | QueryBuilder, order?: 'asc' | 'desc'): QueryBuilder<
TRecord, TRecord,
TResult TResult
>; >;
(columnName: string, order?: string): QueryBuilder<TRecord, TResult>; (columnName: string | QueryBuilder, order?: string): QueryBuilder<TRecord, TResult>;
( (
columnDefs: Array< columnDefs: Array<
keyof TRecord | Readonly<{ column: keyof TRecord; order?: 'asc' | 'desc' }> keyof TRecord | Readonly<{
column: keyof TRecord | QueryBuilder;
order?: 'asc' | 'desc'
}>
> >
): QueryBuilder<TRecord, TResult>; ): QueryBuilder<TRecord, TResult>;
( (
columnDefs: Array<string | Readonly<{ column: string; order?: string }>> columnDefs: Array<string | Readonly<{
): QueryBuilder<TRecord, TResult>; column: string | QueryBuilder;
<TRecordInner, TResultInner>( order?: string;
subQueryBuilder: QueryBuilder<TRecordInner, TResultInner> }>>
): QueryBuilder<TRecord, TResult>; ): QueryBuilder<TRecord, TResult>;
} }

View File

@ -541,6 +541,33 @@ const main = async () => {
.where('users.id', 'u.id') .where('users.id', 'u.id')
); );
await knex<User>('users')
.select()
.orderBy([{
column: knex<User>('users')
.select('u.id')
.from('users as u')
.where('users.id', 'u.id'),
order: 'desc'
}]);
await knex<User>('users')
.select()
.orderBy([{
column: 'id',
order: 'desc'
}, {
column: 'name',
order: 'desc'
}]);
await knex<User>('users')
.select()
.orderBy([{
column: 'id',
order: 'desc'
}, 'name']);
// $ExpectType Dict<string | number>[] // $ExpectType Dict<string | number>[]
await knex<User>('users').count(); await knex<User>('users').count();