import { AsyncComponentLoader, Component, FunctionalComponent } from 'vue';
type Constructor = new (...args: any) => any;
export type ComponentProps<TComponent extends Component> = TComponent extends Constructor ? InstanceType<TComponent>['$props'] : TComponent extends AsyncComponentLoader<infer T extends Component> ? ComponentProps<T> : TComponent extends FunctionalComponent<infer T> ? T : never;
type WithPropsArgs<T extends Component, E extends string = '', P = ComponentProps<T>> = Omit<Partial<P>, E> extends Omit<P, E> ? [component: T, props?: Omit<P, E> & Record<string, unknown>] : [component: T, props: Omit<P, E> & Record<string, unknown>];
type WithProps<T extends Component, E extends string = '', P = ComponentProps<T>> = Omit<Partial<P>, E> extends Omit<P, E> ? {
    component: T;
    props?: Omit<P, E> & Record<string, unknown>;
} : {
    component: T;
    props: Omit<P, E> & Record<string, unknown>;
};
export declare function withProps<T extends Component>(...[component, props]: WithPropsArgs<T>): WithProps<T>;
export declare function withPropsWithoutExcluded<T extends Component, E extends string>(excluded: E | E[], ...[component, props]: WithPropsArgs<T, E>): WithProps<T, E>;
export declare function withPropsWithoutExcludedFactory<E extends string>(prop: E | E[]): <T extends Component>(...args: WithPropsArgs<T, E>) => WithProps<T, E>;
export {};
