import type { Observable, StatefulObservable } from '../types';
type ObservableStateOptions<TType = undefined> = {
    initial?: TType;
    teardown?: VoidFunction;
};
export type ObservableStateReturnType<TType, TError = unknown> = {
    value: TType;
    error: TError | null;
    complete: boolean;
};
/**
 * use state of observable
 * @param subject [dep] Observable subject
 */
export declare function useObservableState<S, TError = unknown>(subject: Observable<S>): ObservableStateReturnType<S | undefined, TError>;
/**
 * use state of observable
 * @param subject [dep] Observable subject
 */
export declare function useObservableState<TType, TError = unknown, TInitial extends TType | undefined = undefined>(subject: Observable<TType>, opt: ObservableStateOptions<TInitial>): ObservableStateReturnType<TType | TInitial, TError>;
/** === StatefulObservable === */
/**
 * use state of observable with value property (`FlowSubject`, `BehaviorSubject`)
 * @param subject [dep] Observable subject
 */
export declare function useObservableState<TType, TError = unknown>(subject: StatefulObservable<TType>): ObservableStateReturnType<TType, TError>;
/**
 * use state of observable with value property (`FlowSubject`, `BehaviorSubject`)
 * @param subject [dep] Observable subject
 */
export declare function useObservableState<TType, TError = unknown>(subject: StatefulObservable<TType>, options: ObservableStateOptions<TType>): ObservableStateReturnType<TType, TError>;
export default useObservableState;
