как добавить проверку что переданный компонент имеет нужные ключи в пропсах?
подскажите пожалуйста куда копать, есть HOC который прокидывает в компонент ключи WithIsIncludeHead, при этом всем, нужно прогнать пропсы этого компонента через JSX.LibraryManagedAttributes чтобы обязательные пропсы, которые указаны в defaultProps стали опциональными. Снизу подготовил реализацию этого HOC
export interface WithIsIncludeHead {
isIncludeHead: boolean;
}
export const withIsIncludeHead = <C extends ComponentType<any>>(Component: C) => {
type Props = JSX.LibraryManagedAttributes<C, ComponentProps<C>>;
const displayName = getComponentDisplayName(Component);
const WrappedComponent = forwardRef<unknown, Props>(function WrappedComponent(props, ref) {
const isIncludeHead = useIsIncludeHead();
return <Component {...props} ref={ref} isIncludeHead={isIncludeHead} />;
});
WrappedComponent.displayName = `withHead(${displayName})`;
return WrappedComponent as ComponentType<Omit<Props, keyof WithIsIncludeHead>>;
};
Вроде все происходит так, как надо. Но есть одна проблема, нужно чтобы еще была проверка на то, что у переданного Component в пропсах были ключи WithIsIncludeHead. Чет никак не могу это реализовать, то при использованнии компонента(который прошел через hoc) вообще не проверяются пропсы, то пропсы которые были добавлены в defaultProps(после добавляения они должны стать опциональными) остаются обязательными.
Последние к чему пришел(в этой реализациии пропсы из defaultProps остались обязательными):
export const withIsIncludeHead = <OwnComponentProps extends object>(Component: ComponentType<OwnComponentProps & WithIsIncludeHead>) => {
type PropsForRef = JSX.LibraryManagedAttributes<ComponentType<OwnComponentProps>, ComponentProps<ComponentType<OwnComponentProps>>>
const displayName = getComponentDisplayName(Component);
const WrappedComponent = forwardRef<unknown, PropsForRef>(function WrappedComponent(props, ref) {
const isIncludeHead = useIsIncludeHead();
return <Component {...props} ref={ref} isIncludeHead={isIncludeHead} />;
});
WrappedComponent.displayName = `withHead(${displayName})`;
return WrappedComponent as ComponentType<Omit<PropsForRef, keyof WithIsIncludeHead>>;
};```