import { Router, useRouter } from "fake-external-lib";
export const withRouter = <TProps extends { router: Router }>(
Component: React.ComponentType<TPops> // React.FC<TProps>
) => {
const NewComponent = (props: Omit<TProps, "router">) => {
const router = useRouter();
return <Component {...(props as TProps)} router={router} />;
};
NewComponent.displayName = `withRouter(${Component.displayName})`;
return NewComponent;
};
const UnwrappedComponent = (props: { router: Router; id: string }) => {
return null;
};
const WrappedComponent = withRouter(UnwrappedComponent);
<>
{/* @ts-expect-error needs a router! */}
<UnwrappedComponent id="123" />
{/* Doesn't need a router passed in! */}
<WrappedComponent id="123" />
<WrappedComponent
// @ts-expect-error id must be the correct property
id={123}
/>
</>;
- Typescript component Strongly React typedtypescript component strongly react react typescript component strongly components typescript generics strongly typescript strongly render react typescript component generics react react typescript components propstype components typescript arguments passing typescript this type type typescript expression error performance typescript interface type