diff --git a/src/index.ts b/src/index.ts index 14eabae4..be376240 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,5 +1,6 @@ export { default as useEvent } from './hooks/useEvent'; export { default as useMergedState } from './hooks/useMergedState'; +export { default as mergeProps } from './mergeProps'; export { supportNodeRef, supportRef, useComposeRef } from './ref'; export { default as get } from './utils/get'; export { default as set } from './utils/set'; diff --git a/src/mergeProps.ts b/src/mergeProps.ts new file mode 100644 index 00000000..268675fa --- /dev/null +++ b/src/mergeProps.ts @@ -0,0 +1,7 @@ +export default function mergeProps( + defaultProps: A, + config: B, + props: C, +): A & B & C { + return { ...defaultProps, ...config, ...props }; +} diff --git a/tests/mergeProps.test.ts b/tests/mergeProps.test.ts new file mode 100644 index 00000000..5070c33e --- /dev/null +++ b/tests/mergeProps.test.ts @@ -0,0 +1,15 @@ +import mergeProps from '../src/mergeProps'; + +test('merge className', () => { + expect( + mergeProps( + { type: 'default', shape: 'round' }, + { className: 'foo', type: 'secondary' }, + { className: 'bar' }, + ), + ).toEqual({ + className: 'bar', + type: 'secondary', + shape: 'round', + }); +});