首页 > 其他分享 >[React Typescript] Strongly Typing Lazy Loaded Components with Generics

[React Typescript] Strongly Typing Lazy Loaded Components with Generics

时间:2023-08-28 18:00:58浏览次数:43  
标签:Strongly Lazy Typescript component lazy loader fake import id

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")} />
</>;

 

标签:Strongly,Lazy,Typescript,component,lazy,loader,fake,import,id
From: https://www.cnblogs.com/Answer1215/p/17663038.html

相关文章

  • TypeScript – Decorator Metadata
    前言在 TypeScript–Decorator装饰器 里,我有提到TypeScript只实现了decorate的特性,把metadata的特性独立了出来。本来我以为还需要等待很长的时间他们才会实现,没想到v5.2既然推出了。哎哟,不错哦!声明:Decorator不是TypeScript语法,它是ECMAScript(AKAJavaScr......
  • TypeScript – Using Disposable
    前言TypeScriptv5.2多了一个新功能叫 Disposable。Dispose的作用是让"对象"离开"作用域"后做出一些"释放资源"的操作。很多地方都可以看到 Dispose概念。比如WebComponent的 disconnectedCallback,Angular组件的 ngOnDestroy。而对象释放资源在其它面向对象......
  • TypeScript – 冷知识
    当genericreturn遇上parameter 报错了。原因是querySelector默认返回类型是抽象的Element。而method参数要求的是具体的InputElement解决方法是传入具体的InputElement类型constinput=document.querySelector<HTMLInputElement>('.input')!;但这不是重点......
  • TypeScript(TS)JavaScript(JS)中的所有循环方法
    for循环:for(leti=0;i<array.length;i++){//循环体}for…of循环:for(constelementofarray){//循环体}forEach方法:array.forEach((element)=>{//循环体});map方法:constnewArray=array.map((element)=>{//对......
  • typescript 数组根据指定字段去重
    this.listDataIn=data.Result.data;constuniqueItems:Item[]=Array.from(newSet(this.listDataIn.map(item=>item.MyLandID))).map(id=>{returnobj.listDataIn.find(item=>item.MyLandID===id);});......
  • [React Typescript] JSX.IntrinsicElements
    interfaceIntrinsicElements{//HTMLa:React.DetailedHTMLProps<React.AnchorHTMLAttributes<HTMLAnchorElement>,HTMLAnchorElement>;abbr:React.DetailedHTMLProps<React.HTMLAttributes<HTMLElemen......
  • typeScript学习-泛型
    typeScript学习泛型为什么要用泛型?泛型定义。泛型在类中的应用?封装一个面向对象的ArrayList类。泛型默认值。泛型约束。泛型在Vue3源码中的应用。exendskeyof+keyof的联合应用。泛型反向赋值。具有以下特点的数据类型叫泛型:特点一:定义时不明确使用时必须明确成某......
  • typeScript学习-类型断言、类型转换
    typeScript学习类型断言、类型转换1、类型断言:语法格式:A数据类型的变量asB数据类型。letb:Bletc:C=basC理解:是绕过TS编译检查,类型断言就是对编译器说:我是这个类型了,无需检查。2、类型断言使用场景exportclassVechile{staticcount:number=3......
  • HarmonyOS/OpenHarmony应用开发-ArkTS语言渲染控制LazyForEach数据懒加载
    LazyForEach从提供的数据源中按需迭代数据,并在每次迭代过程中创建相应的组件。当LazyForEach在滚动容器中使用了,框架会根据滚动容器可视区域按需创建组件,当组件划出可视区域外时,框架会进行组件销毁回收以降低内存占用。一、接口描述LazyForEach(dataSource:IDataSource,......
  • HarmonyOS/OpenHarmony应用开发-ArkTS语言渲染控制LazyForEach数据懒加载
    LazyForEach从提供的数据源中按需迭代数据,并在每次迭代过程中创建相应的组件。当LazyForEach在滚动容器中使用了,框架会根据滚动容器可视区域按需创建组件,当组件划出可视区域外时,框架会进行组件销毁回收以降低内存占用。一、接口描述LazyForEach(dataSource:IDataSource,......