import { Component, FunctionComponent, SFC } from 'react';
export interface CommonProps {
    className?: string;
    'aria-label'?: string;
    'data-test-subj'?: string;
}
export declare type NoArgCallback<T> = () => T;
export declare type RefCallback<Element extends HTMLElement> = (element: Element) => void;
export declare type Omit<T, K> = Pick<T, Exclude<keyof T, K>>;
/**
 * Wraps Object.keys with proper typescript definition of the resulting array
 */
export declare function keysOf<T, K extends keyof T>(obj: T): K[];
export declare type PropsOf<C> = C extends SFC<infer SFCProps> ? SFCProps : C extends FunctionComponent<infer FunctionProps> ? FunctionProps : C extends Component<infer ComponentProps> ? ComponentProps : never;
/**
 * Returns member keys in U not present in T set to never
 * T = { 'one', 'two', 'three' }
 * U = { 'three', 'four', 'five' }
 * returns { 'four': never, 'five': never }
 */
export declare type DisambiguateSet<T, U> = {
    [P in Exclude<keyof T, keyof U>]?: never;
};
/**
 * Allow either T or U, preventing any additional keys of the other type from being present
 */
export declare type ExclusiveUnion<T, U> = (T | U) extends object ? (DisambiguateSet<T, U> & U) | (DisambiguateSet<U, T> & T) : T | U;
