import { Ref } from "vue";
export interface IFuncUpdater<T> {
    (previousState?: T): T;
}
export interface IFuncStorage {
    (): Storage;
}
export interface Options<T> {
    serializer?: (value: T) => string;
    deserializer?: (value: string) => T;
}
export interface OptionsWithDefaultValue<T> extends Options<T> {
    defaultValue: T | IFuncUpdater<T>;
}
export declare type StorageStateResult<T> = [
    Ref<T> | Ref<undefined>,
    (value?: T | IFuncUpdater<T>) => void
];
export declare type StorageStateResultHasDefaultValue<T> = [
    Ref<T> | Ref<undefined>,
    (value?: T | IFuncUpdater<T> | undefined) => void
];
export declare function createUseStorageState(getStorage: () => Storage | undefined): <T>(key: Ref<string>, options: OptionsWithDefaultValue<T>) => StorageStateResultHasDefaultValue<T>;
