import { ISerberPlugin, ISerberPluginDefaultParams } from './types';
export interface SerberOperationOptions {
    throwWhenError?: boolean;
}
export declare class Serber<Params extends {
    [key: string]: any;
} = {}> {
    private _plugins;
    get plugins(): ISerberPlugin<any, any, any>[];
    addPlugin<TParams>(plugin: ISerberPlugin<any, any, TParams>): Serber<Params & TParams>;
    hasPlugin(plugin: ISerberPlugin): boolean;
    removePlugin<TParams>(plugin: ISerberPlugin<any, any, TParams>): Serber<Pick<Params, Exclude<keyof Params, keyof TParams>>>;
    with<TParams>(plugin: ISerberPlugin<any, any, TParams>): Serber<Params & TParams>;
    without<TParams>(plugin: ISerberPlugin<any, any, TParams>): Serber<Omit<Params, keyof TParams>>;
    serialize: <T = any>(obj: any, params?: Params & ISerberPluginDefaultParams, options?: SerberOperationOptions) => T;
    serializeAsync: (obj: any, params?: Params & ISerberPluginDefaultParams, options?: SerberOperationOptions) => Promise<any>;
    deserialize: <T = any>(obj: any, params?: Params & ISerberPluginDefaultParams, options?: SerberOperationOptions) => T;
    deserializeAsync: (obj: any, params?: Params & ISerberPluginDefaultParams, options?: SerberOperationOptions) => Promise<any>;
}
