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 type StorageStateResult<T> = [Ref<T> | Ref<undefined>, (value?: T | IFuncUpdater<T>) => void];
export type StorageStateResultHasDefaultValue<T> = [
    Ref<T> | Ref<undefined>,
    (value?: T | IFuncUpdater<T> | undefined) => void
];
export declare function createUseStorageState(getStorage: () => Storage | undefined): <T>(key: Ref<string> | string, options?: OptionsWithDefaultValue<T>) => StorageStateResultHasDefaultValue<T>;
