knex/test-tsd/querybuilder.test-d.ts

32 lines
755 B
TypeScript
Raw Normal View History

import { knex } from '../types';
2020-11-16 23:55:58 +02:00
import { expectType } from 'tsd';
2020-11-20 12:46:08 +02:00
import { clientConfig } from './common';
2020-11-16 23:55:58 +02:00
const knexInstance = knex(clientConfig);
2020-11-16 23:55:58 +02:00
// Use:
// import { Knex } from 'knex'
2020-11-16 23:55:58 +02:00
2020-11-20 12:46:08 +02:00
// This would be `declare module 'knex'` in runtime code
2020-11-16 23:55:58 +02:00
declare module '../types' {
namespace Knex {
interface QueryBuilder {
customSelect<TRecord extends {}, TResult>(
value: number
): Promise<Knex.QueryBuilder<TRecord, TResult>>;
}
2020-11-16 23:55:58 +02:00
}
}
knex.QueryBuilder.extend('customSelect', function (value: number) {
return new Promise((r) =>
r(this.select(this.client.raw(`${value} as value`)))
);
2020-11-16 23:55:58 +02:00
});
const main = async () => {
expectType<number[]>(
await await knexInstance('users').customSelect<any, number[]>(42)
);
2020-11-20 12:46:08 +02:00
};