Skip to content

Commit 5d9f86e

Browse files
authored
Fix #1143
`Omit` will not work, a common interface `ISql` for `Sql` and `TransactionSql` is introduced. microsoft/TypeScript#41362
1 parent 5c8135f commit 5d9f86e

File tree

1 file changed

+26
-34
lines changed

1 file changed

+26
-34
lines changed

types/index.d.ts

Lines changed: 26 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -658,8 +658,16 @@ declare namespace postgres {
658658
| Fragment
659659
| Fragment[]
660660

661-
interface Sql<TTypes extends Record<string, unknown> = {}> {
661+
interface UnsafeQueryOptions {
662662
/**
663+
* When executes query as prepared statement.
664+
* @default false
665+
*/
666+
prepare?: boolean | undefined;
667+
}
668+
669+
interface ISql<TTypes extends Record<string, unknown> = {}> {
670+
/**
663671
* Query helper
664672
* @param first Define how the helper behave
665673
* @param rest Other optional arguments, depending on the helper type
@@ -675,22 +683,32 @@ declare namespace postgres {
675683
*/
676684
<T extends readonly (object | undefined)[] = Row[]>(template: TemplateStringsArray, ...parameters: readonly (ParameterOrFragment<TTypes[keyof TTypes]>)[]): PendingQuery<T>;
677685

686+
types: this['typed'];
687+
typed: (<T>(value: T, oid: number) => Parameter<T>) & {
688+
[name in keyof TTypes]: (value: TTypes[name]) => postgres.Parameter<TTypes[name]>
689+
};
690+
691+
unsafe<T extends any[] = (Row & Iterable<Row>)[]>(query: string, parameters?: (ParameterOrJSON<TTypes[keyof TTypes]>)[] | undefined, queryOptions?: UnsafeQueryOptions | undefined): PendingQuery<T>;
692+
693+
notify(channel: string, payload: string): PendingRequest;
694+
695+
array<T extends SerializableParameter<TTypes[keyof TTypes]>[] = SerializableParameter<TTypes[keyof TTypes]>[]>(value: T, type?: number | undefined): ArrayParameter<T>;
696+
file<T extends readonly any[] = Row[]>(path: string | Buffer | URL | number, options?: { cache?: boolean | undefined } | undefined): PendingQuery<T>;
697+
file<T extends readonly any[] = Row[]>(path: string | Buffer | URL | number, args: (ParameterOrJSON<TTypes[keyof TTypes]>)[], options?: { cache?: boolean | undefined } | undefined): PendingQuery<T>;
698+
json(value: JSONValue): Parameter;
699+
}
700+
701+
interface Sql<TTypes extends Record<string, unknown> = {}> extends ISql<TTypes> {
678702
CLOSE: {};
679703
END: this['CLOSE'];
680704
PostgresError: typeof PostgresError;
681705

682706
options: ParsedOptions<TTypes>;
683707
parameters: ConnectionParameters;
684-
types: this['typed'];
685-
typed: (<T>(value: T, oid: number) => Parameter<T>) & {
686-
[name in keyof TTypes]: (value: TTypes[name]) => postgres.Parameter<TTypes[name]>
687-
};
688708

689-
unsafe<T extends any[] = (Row & Iterable<Row>)[]>(query: string, parameters?: (ParameterOrJSON<TTypes[keyof TTypes]>)[] | undefined, queryOptions?: UnsafeQueryOptions | undefined): PendingQuery<T>;
690709
end(options?: { timeout?: number | undefined } | undefined): Promise<void>;
691710

692711
listen(channel: string, onnotify: (value: string) => void, onlisten?: (() => void) | undefined): ListenRequest;
693-
notify(channel: string, payload: string): PendingRequest;
694712

695713
subscribe(event: string, cb: (row: Row | null, info: ReplicationEvent) => void, onsubscribe?: (() => void), onerror?: (() => any)): Promise<SubscriptionHandle>;
696714

@@ -699,36 +717,10 @@ declare namespace postgres {
699717
begin<T>(cb: (sql: TransactionSql<TTypes>) => T | Promise<T>): Promise<UnwrapPromiseArray<T>>;
700718
begin<T>(options: string, cb: (sql: TransactionSql<TTypes>) => T | Promise<T>): Promise<UnwrapPromiseArray<T>>;
701719

702-
array<T extends SerializableParameter<TTypes[keyof TTypes]>[] = SerializableParameter<TTypes[keyof TTypes]>[]>(value: T, type?: number | undefined): ArrayParameter<T>;
703-
file<T extends readonly any[] = Row[]>(path: string | Buffer | URL | number, options?: { cache?: boolean | undefined } | undefined): PendingQuery<T>;
704-
file<T extends readonly any[] = Row[]>(path: string | Buffer | URL | number, args: (ParameterOrJSON<TTypes[keyof TTypes]>)[], options?: { cache?: boolean | undefined } | undefined): PendingQuery<T>;
705-
json(value: JSONValue): Parameter;
706-
707720
reserve(): Promise<ReservedSql<TTypes>>
708721
}
709722

710-
interface UnsafeQueryOptions {
711-
/**
712-
* When executes query as prepared statement.
713-
* @default false
714-
*/
715-
prepare?: boolean | undefined;
716-
}
717-
718-
interface TransactionSql<TTypes extends Record<string, unknown> = {}> extends Omit<Sql<TTypes>,
719-
'parameters' |
720-
'largeObject' |
721-
'subscribe' |
722-
'CLOSE' |
723-
'END' |
724-
'PostgresError' |
725-
'options' |
726-
'reserve' |
727-
'listen' |
728-
'begin' |
729-
'close' |
730-
'end'
731-
> {
723+
interface TransactionSql<TTypes extends Record<string, unknown> = {}> extends ISql<TTypes> {
732724
savepoint<T>(cb: (sql: TransactionSql<TTypes>) => T | Promise<T>): Promise<UnwrapPromiseArray<T>>;
733725
savepoint<T>(name: string, cb: (sql: TransactionSql<TTypes>) => T | Promise<T>): Promise<UnwrapPromiseArray<T>>;
734726

0 commit comments

Comments
 (0)