/**
 * @packageDocumentation
 * @module types
 */
import { Observable } from 'rxjs';
export { DeepPartial, DeepReadonly, Dictionary, ValueOf as LooseValueOf, } from 'ts-essentials';
export declare type Readonlyable<T> = T | Readonly<T>;
export declare type AnyArray<T> = Readonlyable<T[]>;
export declare type Arrayable<T, R extends boolean = false> = [R] extends [never] ? T | T[] : R extends true ? Readonly<T> | readonly T[] : R extends false ? Readonlyable<T> | AnyArray<T> : never;
export declare type Nullable<T> = T | null | undefined;
export declare type Callback<T extends any[] = unknown[], R = unknown> = (...args: T) => R;
/** Dark magic helper */
export declare type IfEqual<X, Y, A = X, B = never> = (<T>() => T extends X ? true : false) extends <T>() => T extends Y ? true : false ? A : B;
export declare type Keys<T> = {
    [Key in keyof T]: Key;
};
export declare type ObservableType<T> = T extends Observable<infer R> ? R : never;
export declare type UnaryObservableFunction<T, R> = (source: Observable<T>) => Observable<R>;
export declare type ValueOf<T> = T extends {
    [key: string]: infer M;
} ? M : T extends {
    [key: number]: infer N;
} ? N : never;
