import { Type } from "../types/type";
import { TableExport } from "./export";
import { TableLoader } from "./loader";
import { TableQueryReference } from "./query";
import { TableRow } from "./row";
export interface TableOptions<T> {
    data: T[];
}
export declare class Table<T> {
    options: TableOptions<T>;
    rows: TableRow<T>[];
    constructor(options: TableOptions<T>);
    /**
     * Load data from a raw format into a table
     * @param loader
     * @param data
     * @returns
     */
    static load<T, K>(loader: Type<TableLoader<T, K>>, data: K): Table<T>;
    /**
     * Select a range in an excel-like manner and return a query of the table
     * @param range
     * @returns
     */
    select(range: TableQueryReference): import("./query-results").TableQueryResults;
    /**
     * Empty the data from the table
     */
    clear(): void;
    /**
     * Get a list of the headers
     * @returns string[]
     */
    getHeaders(): string[];
    /**
     * Sort the table by a column index
     * @param columnIndex
     * @param descending
     */
    sort(columnIndex: number, descending?: boolean): void;
    /**
     * Export the table
     * @param exporter
     * @returns
     */
    export<K>(exporter: Type<TableExport<T, K>>): K;
}
