declare interface WhereCondition { type: 'and' | 'or' method: 'where' | 'whereIn' | 'whereNull' | 'whereNotNull' | 'whereBetween' | 'whereExists' column: keyof T operator?: Operator value?: V values?: V[] | [V, V] range?: [V, V] callback?: (query: SubqueryBuilder) => void } export type Operator = '=' | '<' | '>' | '<=' | '>=' | '<>' | '!=' | 'like' | 'not like' | 'in' | 'not in' | 'between' | 'not between' | 'is' | 'is not'; export declare class SubqueryBuilder { where(column: TKey, ...args: [T[TKey]] | [Operator, T[TKey]]): void; orWhere(column: TKey, ...args: [T[TKey]] | [Operator, T[TKey]]): void; whereIn(column: TKey, values: T[TKey][]): void; whereNotIn(column: TKey, values: T[TKey][]): void; whereNull(column: keyof T): void; whereNotNull(column: keyof T): void; whereBetween(column: TKey, range: [T[TKey], T[TKey]]): void; whereExists(callback: (query: SubqueryBuilder) => void): void; getConditions(): WhereCondition[]; }