[React Typescript] Strongly Typing Lazy Loaded Components with Generics
Navigating to the type definition for lazy
by CMD + click
in local VS Code, or in the DefinitelyTyped repo.
We can see the following definition:
function lazy<T extends ComponentType<any>>(
factory: () => Promise<{ default: T }>
): LazyExoticComponent<T>;
ComponentType<Any>, is helper type to restrict the component must has the prop we passed in.
import { ComponentProps, ComponentType, lazy, Suspense, useMemo } from "react";
type Props<T extends ComponentType<any>> = {
loader: () => Promise<{ default: T }>;
} & ComponentProps<T>;
function LazyLoad<T extends ComponentType<any>>({
loader,
...props
}: Props<T>) {
const LazyComponent = useMemo(() => lazy(loader), [loader]);
return (
<Suspense fallback={"Loading..."}>
<LazyComponent {...props} />
</Suspense>
);
}
<>
<LazyLoad loader={() => import("fake-external-component")} id="123" />
<LazyLoad
loader={() => import("fake-external-component")}
// @ts-expect-error number is not assignable to string
id={123}
/>
{/* @ts-expect-error id is missing! */}
<LazyLoad loader={() => import("fake-external-component")} />
</>;
分类:
React
, TypeScript
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
2020-08-28 [Postgres] Keep Data Integrity with Constraints
2020-08-28 [Postgres] Removing Data with SQL Delete, Truncate, and Drop
2020-08-28 [Postgres] Using uuid-ossp extenstion
2020-08-28 [Machine Learning] Simplified Cost Function and Gradient Descent
2019-08-28 [SCSS] SASS dynamic class properties
2018-08-28 [VueJS + Typescript] Decouple Dependencies Using IoC Containers in Vue with TypeScript and InversifyJS
2017-08-28 [D3] Creating a D3 Force Layout in React