import type { ODataQueryProvider } from "./ODataQueryProvider";
import { Expression } from "./Expression";
import type { ExcludeProperties } from "./ExcludeProperties";
import type { ODataV4Options } from "./ODataV4QueryProvider";
import { ODataQueryBase } from "./ODataQueryBase";
import type { ODataQueryResponse, ODataQueryResponseWithCount, ODataResponse } from "./ODataResponse";
import { resolveQuery, type ReplaceDateWithString } from "./ProxyFilterTypes";
/**
 * Represents a query against an OData source.
 * This query is agnostic of the version of OData supported by the server (the provided @type {ODataQueryProvider} is responsible for translating the query into the correct syntax for the desired OData version supported by the endpoint).
 */
export declare class ODataQuery<T, U = ExcludeProperties<T, []>> extends ODataQueryBase<T, U> {
    readonly provider: ODataQueryProvider;
    readonly expression?: Expression | undefined;
    static forV4<T>(endpoint: string, options?: Partial<ODataV4Options>): ODataQuery<T, ExcludeProperties<T, []>>;
    constructor(provider: ODataQueryProvider, expression?: Expression | undefined);
    /**
     * Returns a single record with the provided key value. Some functions (such as top, skip, filter, etc.) are ignored when this function is invoked.
     * @param key
     */
    getAsync(key: unknown): Promise<ODataResponse & ReplaceDateWithString<U>>;
    /**
     * Returns a set of records.
     */
    getManyAsync(): Promise<ODataQueryResponse<ReplaceDateWithString<U>>>;
    /**
     * Returns a set of records, including the total count of records, which may not be the same as the number of records return if the results are paginated.
     */
    getManyWithCountAsync(): Promise<ODataQueryResponseWithCount<ReplaceDateWithString<U>>>;
    getValueAsync(): Promise<Blob>;
    [resolveQuery](): unknown;
    [Symbol.asyncIterator](): AsyncGenerator<ReplaceDateWithString<U>, undefined, undefined>;
}
