import type { AnyFunction } from './types'; export type Signal = { value: T; }; type SignalInternal = Signal & { [refTag]: true; [readonly]: boolean; [Symbol.toPrimitive]: any; internalValue: T; dependencies: Set; watchers: Set; suspended: boolean; update(value?: T): void; }; declare const refTag: unique symbol; declare const readonly: unique symbol; declare function canBeObserved(object: any): boolean; declare function reactive(object: T, effect: AnyFunction, notifier?: SignalInternal): T; declare function unwrap(object: T): T; declare function isReadOnlyRef(ref: Signal): boolean; declare function ref(initial?: T, isShallow?: boolean): Signal; declare function computed(fn: () => T): Signal; declare function shallowRef(value?: T): Signal; declare function isRef(t: any): t is Signal; declare function suspend(s: Signal): void; declare function resume(s: Signal): void; export type WatchOptions = { immediate: boolean; }; declare function watch(target: Signal, fn: AnyFunction, o?: WatchOptions): () => void; declare function effect(fn: AnyFunction, effectFn: AnyFunction, o?: WatchOptions): () => void; declare function hook(initial: T, isShallow?: boolean): readonly [Signal, (v: T) => T]; export { ref, computed, effect, watch, hook, reactive, unwrap, isRef, isReadOnlyRef, shallowRef, canBeObserved, suspend, resume };