EasyJavaScriptTypeScript
mergeProps
ObjectsUtilities
Implement solve(defaultProps, userProps) that merges two prop objects:
- User props override default props.
- Event handlers (keys starting with
on) are composed: call both
the default handler then the user handler (in that order).
- All other props use the user value when provided.
solve(
{ onClick: () => log('default'), className: 'btn' },
{ onClick: () => log('user'), className: 'btn-primary' }
)
// Returns a merged object where onClick calls both handlersSince handlers produce side effects, the test drives them via call order
tracking.
Sample tests
Test #1Partial override, defaults kept
Input: [{"id":"x","className":"a"},{"id":"y"}]
Output: {"id":"y","className":"a"}
Test #2Object prop overridden
Input: [{"style":{"color":"red"}},{"style":{"color":"blue"}}]
Output: {"style":{"color":"blue"}}
Test #3Boolean prop override
Input: [{"disabled":false,"data-testid":"btn"},{"disabled":true}]
Output: {"disabled":true,"data-testid":"btn"}
Test #4Default type kept, value overridden
Input: [{"type":"button","value":""},{"value":"Submit"}]
Output: {"type":"button","value":"Submit"}
Test #5Non-handler props override
Input: [{"className":"btn"},{"className":"btn-primary"}]
Output: {"className":"btn-primary"}