merge-props
Version:
Merges className, style, and DOM event handlers for React elements
11 lines (10 loc) • 798 B
TypeScript
type UnionToIntersection<U> = (U extends any ? (k: U) => void : never) extends ((k: infer I) => void) ? I : never;
/**
* Merges sets of props together:
* - duplicate `className` props get concatenated
* - duplicate `style` props get shallow merged (later props have precedence for conflicting rules)
* - duplicate functions (to be used for event handlers) get called in order from left to right
* @param props Sets of props to merge together. Later props have precedence.
*/
declare const _default: <T extends {}[]>(...props: T) => UnionToIntersection<T[number]> extends infer T_1 ? { [K in keyof T_1]: K extends "className" ? string : K extends "style" ? UnionToIntersection<T[number]>[K] : Exclude<Extract<T[number], { [Q in K]: unknown; }>[K], undefined>; } : never;
export = _default;