import { OperatorFunction, ObservedValueOf } from 'rxjs';
declare type IsEqualTypes<L, R> = L extends R ? (R extends L ? true : never) : never;
declare type InputStreamValueType<T extends (...args: unknown[]) => OperatorFunction<unknown, unknown>> = ObservedValueOf<Parameters<ReturnType<T>>[0]>;
declare type OutputStreamValueType<T extends (...args: unknown[]) => OperatorFunction<unknown, unknown>> = ObservedValueOf<ReturnType<ReturnType<T>>>;
declare type IdentityOp<T extends (...args: unknown[]) => OperatorFunction<unknown, unknown>> = (..._args: Parameters<T>) => OperatorFunction<InputStreamValueType<T>, InputStreamValueType<T>>;
declare type ConditionalOperatorReturnType<Op extends (...args: unknown[]) => OperatorFunction<unknown, unknown>> = IsEqualTypes<InputStreamValueType<Op>, OutputStreamValueType<Op>> extends true ? Op : Op | IdentityOp<Op>;
export declare function conditionalOperator<Op extends (...args: unknown[]) => OperatorFunction<unknown, unknown>>(condition: boolean, op: Op): ConditionalOperatorReturnType<Op>;
export {};
