import { IStorageBase } from '../../core'; export interface UseStorageSubscribeOptions { /** * Функция сравнения предыдущего и нового среза. Если возвращает `true`, * снапшот не меняется по ссылке и компонент НЕ ререндерится — даже если * остальное состояние стора изменилось. Полезно, когда селектор возвращает * объект/массив (новая ссылка на каждый тик) или когда нужно ререндерить * только при изменении конкретного среза. */ equals?: (a: R, b: R) => boolean; } /** * Хук для подписки на изменения в хранилище. * Использует useSyncExternalStore для корректной работы в Concurrent Mode. * * Принимает IStorageBase (общий интерфейс для sync и async хранилищ), * так как подписки одинаковы для всех типов. * * @template S - Тип состояния хранилища * @template R - Тип возвращаемого значения * @param storage - Экземпляр хранилища или null (до инициализации) * @param selector - Функция-селектор для выбора данных * @param options - Опции: `equals` для мемоизации снапшота (см. {@link UseStorageSubscribeOptions}) * @returns Значение из хранилища */ export declare const useStorageSubscribe: , R = any>(storage: IStorageBase | null, selector: (state: S) => R, options?: UseStorageSubscribeOptions) => R | undefined;