import { UrlCallbackParam, RestModel } from "..";
import { Schema, StringOrNumberKeys } from "../../Schema";
import { HttpError } from '../../../../';
export declare type UseGetByIdResult<Item> = {
    item: Item | null;
    initialized: boolean;
    loading: boolean;
    invalidated: boolean;
    error: HttpError | null;
};
export declare type UseGetByIdPopulatedResult<PartialItem, PopulatedItem> = {
    populated: true;
    invalidated: boolean;
    initialized: boolean;
    error: HttpError | null;
    loading: boolean;
    item: PopulatedItem;
} | {
    item: PartialItem | null;
    loading: boolean;
    initialized: boolean;
    populated: false;
    invalidated: boolean;
    error: HttpError | null;
};
export default class BasicIdRestModel<S extends Schema<any> = any, IdKey extends StringOrNumberKeys<S['RealType']> & StringOrNumberKeys<S['PopulatedType']> & string = any> extends RestModel<{}, S, IdKey, any, any> {
    constructor(basicRestModel: RestModel<{}, S, any, any, any>, id: IdKey, url: UrlCallbackParam<{}>);
    useInvalidate(id: S["RealType"][IdKey]): () => void;
    useInvalidateAll(): () => void;
    useFetchByIdIfNeeded(id: S["RealType"][IdKey]): void;
    useGetById(id: S["RealType"][IdKey]): {
        redirect: () => void;
        item: S["RealType"] | null;
        initialized: boolean;
        loading: boolean;
        invalidated: boolean;
        error: HttpError | null;
    };
    useFetchByIdPopulatedIfNeeded(id: S["PopulatedType"][IdKey]): void;
    useGetByIdPopulated(id: S["PopulatedType"][IdKey]): {
        redirect: () => void;
        populated: true;
        invalidated: boolean;
        initialized: boolean;
        error: HttpError | null;
        loading: boolean;
        item: S["FullPopulatedType"];
    } | {
        redirect: () => void;
        item: S["PopulatedType"] | null;
        loading: boolean;
        initialized: boolean;
        populated: false;
        invalidated: boolean;
        error: HttpError | null;
    };
}
