Files
react/components/utils/use-default-props.ts
witt 7facec3849 feat(scaleable): add scaleable props to each component (#531)
* feat(scaleable): add scaleable props to each component

* chore(scaleable): update the exported type

* feat: apply scaleable to components

chore: remove with-default

test: improve testcase for scaleable

chore: resolve test warning

ci: upgrade nodejs to latest lts

docs: fix type error in document site

* docs: update documents to be compatible with scaleable

chore: fix build errors

* chore: remove all size-related attributes

docs: improve guide document

* docs: add scaleable documentation

test: update snapshots

chore: remove unused

* feat: add scaleable to grid components

* docs: improve docs

* test: update snapshots

* fix(grid): fix basic component props
2021-08-13 17:10:57 +08:00

22 lines
643 B
TypeScript

const useDefaultProps = <T extends Record<string | number, any>, D extends Partial<T>>(
props: T,
defaultProps: D,
): T & Required<D> => {
let nextProps = {} as T
const propsKeys: Array<keyof T> = Object.keys(props || {})
const defaultKeys: Array<keyof T> = Object.keys(defaultProps || {})
for (const propsName of propsKeys) {
nextProps[propsName] = props[propsName] as T[keyof T]
}
for (const defaultName of defaultKeys) {
if (props[defaultName] === undefined) {
nextProps[defaultName] = defaultProps[defaultName] as T[keyof T]
}
}
return nextProps as T & Required<D>
}
export default useDefaultProps