I want to write an HOC that wrap a component by using React.lazy and React.Suspense in TypeScript, but I don't know how to fix the types errors.
type AsyncComponentFactory<P> = () => Promise<{ default: ComponentType<P> }>;
export function loadable<P>(factory: AsyncComponentFactory<P>): ComponentType<P> {
const LazyComponent = React.lazy(factory);
const WrappedWithLoadableComponent = forwardRef<P>((props: P, ref) => (
<React.Suspense fallback={'loading'}>
<LazyComponent {...props} ref={ref} />
</React.Suspense>
));
WrappedWithLoadableComponent.displayName = 'LazyExoticComponent(loadableComponent)';
return WrappedWithLoadableComponent;
}
const JobsView = loadable(() => import(/* webpackChunkName: "JobsView" */ '@views/Jobs'));
