From 5d9f86eced805ed4fdf3aa4f3f6cd7528c7993f6 Mon Sep 17 00:00:00 2001 From: Felix <39055101+sep2@users.noreply.github.com> Date: Wed, 7 Jan 2026 14:11:12 +0800 Subject: [PATCH 1/2] Fix https://github.com/porsager/postgres/issues/1143 `Omit` will not work, a common interface `ISql` for `Sql` and `TransactionSql` is introduced. https://github.com/microsoft/TypeScript/issues/41362 --- types/index.d.ts | 60 +++++++++++++++++++++--------------------------- 1 file changed, 26 insertions(+), 34 deletions(-) diff --git a/types/index.d.ts b/types/index.d.ts index 4b796799..13c3432f 100644 --- a/types/index.d.ts +++ b/types/index.d.ts @@ -658,8 +658,16 @@ declare namespace postgres { | Fragment | Fragment[] - interface Sql = {}> { + interface UnsafeQueryOptions { /** + * When executes query as prepared statement. + * @default false + */ + prepare?: boolean | undefined; + } + + interface ISql = {}> { + /** * Query helper * @param first Define how the helper behave * @param rest Other optional arguments, depending on the helper type @@ -675,22 +683,32 @@ declare namespace postgres { */ (template: TemplateStringsArray, ...parameters: readonly (ParameterOrFragment)[]): PendingQuery; + types: this['typed']; + typed: ((value: T, oid: number) => Parameter) & { + [name in keyof TTypes]: (value: TTypes[name]) => postgres.Parameter + }; + + unsafe)[]>(query: string, parameters?: (ParameterOrJSON)[] | undefined, queryOptions?: UnsafeQueryOptions | undefined): PendingQuery; + + notify(channel: string, payload: string): PendingRequest; + + array[] = SerializableParameter[]>(value: T, type?: number | undefined): ArrayParameter; + file(path: string | Buffer | URL | number, options?: { cache?: boolean | undefined } | undefined): PendingQuery; + file(path: string | Buffer | URL | number, args: (ParameterOrJSON)[], options?: { cache?: boolean | undefined } | undefined): PendingQuery; + json(value: JSONValue): Parameter; + } + + interface Sql = {}> extends ISql { CLOSE: {}; END: this['CLOSE']; PostgresError: typeof PostgresError; options: ParsedOptions; parameters: ConnectionParameters; - types: this['typed']; - typed: ((value: T, oid: number) => Parameter) & { - [name in keyof TTypes]: (value: TTypes[name]) => postgres.Parameter - }; - unsafe)[]>(query: string, parameters?: (ParameterOrJSON)[] | undefined, queryOptions?: UnsafeQueryOptions | undefined): PendingQuery; end(options?: { timeout?: number | undefined } | undefined): Promise; listen(channel: string, onnotify: (value: string) => void, onlisten?: (() => void) | undefined): ListenRequest; - notify(channel: string, payload: string): PendingRequest; subscribe(event: string, cb: (row: Row | null, info: ReplicationEvent) => void, onsubscribe?: (() => void), onerror?: (() => any)): Promise; @@ -699,36 +717,10 @@ declare namespace postgres { begin(cb: (sql: TransactionSql) => T | Promise): Promise>; begin(options: string, cb: (sql: TransactionSql) => T | Promise): Promise>; - array[] = SerializableParameter[]>(value: T, type?: number | undefined): ArrayParameter; - file(path: string | Buffer | URL | number, options?: { cache?: boolean | undefined } | undefined): PendingQuery; - file(path: string | Buffer | URL | number, args: (ParameterOrJSON)[], options?: { cache?: boolean | undefined } | undefined): PendingQuery; - json(value: JSONValue): Parameter; - reserve(): Promise> } - interface UnsafeQueryOptions { - /** - * When executes query as prepared statement. - * @default false - */ - prepare?: boolean | undefined; - } - - interface TransactionSql = {}> extends Omit, - 'parameters' | - 'largeObject' | - 'subscribe' | - 'CLOSE' | - 'END' | - 'PostgresError' | - 'options' | - 'reserve' | - 'listen' | - 'begin' | - 'close' | - 'end' - > { + interface TransactionSql = {}> extends ISql { savepoint(cb: (sql: TransactionSql) => T | Promise): Promise>; savepoint(name: string, cb: (sql: TransactionSql) => T | Promise): Promise>; From da251e755352234baa34a0f5e09f80e2a57dc836 Mon Sep 17 00:00:00 2001 From: Michal Knizek Date: Thu, 2 Apr 2026 10:53:07 +0200 Subject: [PATCH 2/2] Fix ReservedSql type to extend ISql instead of Sql ReservedSql incorrectly extends Sql, exposing methods like begin(), listen(), subscribe(), reserve(), end(), etc. that do not exist at runtime on reserved connections. Change it to extend ISql, matching the approach used for TransactionSql. Fixes #713 --- types/index.d.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/types/index.d.ts b/types/index.d.ts index 13c3432f..4423373f 100644 --- a/types/index.d.ts +++ b/types/index.d.ts @@ -727,7 +727,7 @@ declare namespace postgres { prepare(name: string): Promise>; } - interface ReservedSql = {}> extends Sql { + interface ReservedSql = {}> extends ISql { release(): void; } }