import type { FindsType } from '../types/model.types';
import { type WhereObject } from '../types/query.types';
import { BaseEntityClass, QueryBuilder } from './query.builder';
export declare class Model<T = any> {
    private dbName;
    private tableName;
    private entity;
    private queryBuilder;
    constructor(dbName: string, table: string | (new () => T) | typeof BaseEntityClass<T>, opt?: any);
    find<K extends keyof T>(opt?: FindsType<T, K>): Promise<T[]>;
    findAll<K extends keyof T>(fields?: K[]): Promise<T[]>;
    findOne<K extends keyof T>(opt?: FindsType<T, K>): Promise<T>;
    first<K extends keyof T>(opt?: FindsType<T, K>): Promise<T>;
    create(data: Partial<T>): Promise<boolean>;
    update(data: Partial<T>, ...whereConditions: (string | WhereObject<Partial<T>>)[]): Promise<any>;
    delete(...whereConditions: (string | WhereObject<Partial<T>>)[]): Promise<any>;
    count<K extends keyof T>(field?: K): Promise<number>;
    max<K extends keyof T>(field: any): Promise<number>;
    min<K extends keyof T>(field: K): Promise<number>;
    avg<K extends keyof T>(field: K): Promise<number>;
    sum<K extends keyof T>(field: K): Promise<number>;
    exists(...whereConditions: (string | WhereObject<Partial<T>>)[]): Promise<boolean>;
    pluck<K extends keyof T>(field: K): Promise<Array<T[K]>>;
    raw(query: string, values?: (string | number | boolean | null)[]): Promise<any>;
    query(): QueryBuilder<T>;
    disconnect(): Promise<void>;
    reconnect(): Promise<this>;
    debug(type?: 'now' | 'final', func?: (sql: string, data: any) => void): this;
}
