/**
 * @public
 */
export type SignalSubscription = () => void;
/**
 * @public
 */
export interface ISignal<T> {
    /**
     * Gets the current value of the signal.
     * @returns The current value.
     */
    get(): T;
}
/**
 * @public
 */
export interface IWritableSignal<T> extends ISignal<T> {
    /**
     * Sets a new value for the signal.
     * @param value The new value to set.
     */
    set(value: T): void;
    /**
     * Updates the current value with the result of the update function.
     * @param updateFn A function to update the value.
     */
    update(updateFn: (value: T) => T): void;
    /**
     * Converts this writable signal into a readonly signal.
     * @returns A readonly version of this signal.
     */
    asReadonly(): ISignal<T>;
}
/**
 * A type alias for a readonly version of Signal.
 * @public
 */
export type ReadonlySignal<T> = ISignal<T>;
//# sourceMappingURL=SignalTypes.d.ts.map