declare function batch(callback: () => T): T; declare class Signal { constructor(value?: T); subscribe(fn: (value: T) => void): () => void; valueOf(): T; toString(): string; peek(): T; get value(): T; set value(value: T); } declare function signal(value: T): Signal; interface ReadonlySignal extends Signal { readonly value: T; } declare function computed(compute: () => T): ReadonlySignal; declare function effect(compute: () => unknown): () => void; export { signal, computed, effect, batch, Signal, ReadonlySignal };