better-react-web-component
Version:
Wrapper for React Component to CustomElement
31 lines (30 loc) • 1.36 kB
TypeScript
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 {};