export type Handler = () => void;
export type HandlerOf<T> = (arg: T) => void;
export type Predicate = () => boolean;
export type PredicateOf<T> = (arg: T) => boolean;
export interface Dictionary<T> {
    [K: string]: T;
}
export declare function noop(): void;
export declare function unreachable(_x: never): never;
export declare function isDefined<T>(value: T | undefined): value is T;
export declare function isDefinedOr<T>(value: T | undefined, backup: T): T;
export declare function isPromise(value: unknown): boolean;
export type IsUnion<T, U extends T = T> = (T extends any ? (U extends T ? false : true) : never) extends false ? false : true;
type Expand<T> = T extends object ? {
    [K in keyof T]: Expand<T[K]>;
} : T;
type AllKeys<T> = T extends unknown ? keyof T : never;
export type ExclusiveUnion<T, K extends PropertyKey = AllKeys<T>> = T extends unknown ? Expand<T & {
    [P in Exclude<K, keyof T>]?: never;
}> : never;
export {};
