const useDefaultProps = , D extends Partial>( props: T, defaultProps: D, ): T & Required => { let nextProps = {} as T const propsKeys: Array = Object.keys(props || {}) const defaultKeys: Array = 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 } export default useDefaultProps