type StorageType = 'localStorage' | 'sessionStorage'; type NotUndefined = T extends undefined ? never : T; type StateHookTuple = readonly [T, React.Dispatch>]; type CustomStorageEvent = CustomEvent; declare global { interface WindowEventMap { 'foxact-use-local-storage': CustomStorageEvent; 'foxact-use-session-storage': CustomStorageEvent; } } type Serializer = (value: T) => string; type Deserializer = (value: string) => T; interface UseStorageRawOption { raw: true; } interface UseStorageParserOption { raw?: false; serializer: Serializer; deserializer: Deserializer; } declare function createStorage(type: StorageType): { useStorageValue: { (key: string, serverValue: NotUndefined, options?: UseStorageRawOption | UseStorageParserOption): T; (key: string, serverValue?: undefined, options?: UseStorageRawOption | UseStorageParserOption): T | null; }; useSetStorage: (key: string, options?: UseStorageRawOption | UseStorageParserOption) => (v: React.SetStateAction) => void; useStorage: { (key: string, serverValue: NotUndefined, options?: UseStorageRawOption | UseStorageParserOption): StateHookTuple; (key: string, serverValue?: undefined, options?: UseStorageRawOption | UseStorageParserOption): StateHookTuple; }; }; export { createStorage }; export type { Deserializer, NotUndefined, Serializer, StateHookTuple, StorageType, UseStorageParserOption, UseStorageRawOption };