export declare const optional: {
    readonly string: 0;
    readonly number: 1;
    readonly boolean: 2;
    readonly event: 3;
    readonly json: 4;
};
export declare const required: {
    readonly string: 20;
    readonly number: 21;
    readonly boolean: 22;
    readonly event: 23;
    readonly json: 24;
};
type InferType<T> = T extends typeof optional.string ? string | undefined : T extends typeof optional.json ? Record<string, unknown> | undefined : T extends typeof optional.number ? number | undefined : T extends typeof optional.boolean ? boolean | undefined : T extends typeof optional.event ? ((e: {
    detail: any;
}) => void) | undefined : T extends typeof required.string ? string : T extends typeof required.json ? Record<string, unknown> : T extends typeof required.number ? number : T extends typeof required.boolean ? boolean : T extends typeof required.event ? (e: {
    detail: any;
}) => void : never;
type Required<T> = {
    [K in keyof T as undefined extends T[K] ? K : never]?: T[K];
};
type Optional<T> = {
    [K in keyof T as undefined extends T[K] ? never : K]: T[K];
};
type MakeUndefinedOptional<T> = Required<T> & Optional<T>;
export type InferProps<Props, Overwrite extends Record<string, any> = {}> = Omit<MakeUndefinedOptional<{
    [K in keyof Props]-?: InferType<Props[K]>;
}>, keyof Overwrite> & Overwrite;
export {};
