首页 > 其他分享 >Typescript 内置工具类型

Typescript 内置工具类型

时间:2023-06-28 16:22:14浏览次数:40  
标签:内置 string number interface Typescript 类型 工具 type 属性

  1.  Partial<T> 将类型T的属性都变为可选属性,并构造一个新类型

    1 interface Inter {
    2     name: string
    3     age:number
    4 }
    5 
    6 type T = Partial<Inter> // { name?: string; age?: number; }

     

  2.  Required<T>  将类型T的属性都变为必选属性,并构造一个新类型  和 Partial正好相反

    interface Inter { 
        name?: string
        age?:number
    }
    
    type T = Required<Inter> // { name: string; age: number; }

     

  3. Readonly<T> 构造一个新类型,并将实际类型参数T中的所有属性变为只读属性
    interface A {
        x: number
        y: number
    }
    type T = Readonly<A>; // // { readonly x: number; readonly y: number; }
    const a: T = { x: 0, y: 0 };
    // a.x = 1;   // 编译错误!不允许修改
    // a.y = 1;   // 编译错误!不允许修改

     

  4. Record<K,T>  构建一个属性名类型为K的联合类型,值为T类型的对象类型
    type K = 'x' | 'y';
    type T = number;
    type R = Record<K, T>; // { x: number; y: number; }
    const a: R = { x: 0, y: 0 };  //  x' y 不能缺失任何一个
    interface EmployeeType {
        id: number
        fullname: string
        role: string
    }
    
    let employees: Record<number, EmployeeType> = {
        0: { id: 1, fullname: "John Doe", role: "Designer" },
        1: { id: 2, fullname: "Ibrahima Fall", role: "Developer" },
        2: { id: 3, fullname: "Sara Duckson", role: "Developer" },
    }


    Record 实现源码:

    /**
     * Construct a type with a set of properties K of type T
     */
    type Record<K extends keyof any, T> = {
        [P in K]: T;
    };

    K中的所有属性值都转换为T类型,并将返回的新类型返回给proxyKType,K可以是联合类型、对象、枚举…

    追加属性:

    type K = 'name' | 'age' | 'sex'
    type T = string
    type Ks = K | 'height' // 追加属性
    type R = Record<Ks, T>
    
    const LILI: R  = {
        name: 'LILI', 
        sex: 'man',
        age: '12', 
        height:'178'
    }

     

  5. Pick<T,K>  从已有类型T中选组指定类型 K 中的属性及其类型后构建出一个新德对象类型
    interface A { 
        x: number
        y: string
    }
    type T = Pick<A,'x'> // { x: number; }
    interface SuperbUser {
      userId: number;
      macAddress: string;
      username: string;
      email: string;
      password: string;
      firstName: string;
      lastName: string;
      roles: ('Admin' | 'Editor' | 'Author')[]
    };
    
    type GuestUser = 'userId' | 'macAddress' | 'username'
    type T = Pick<SuperbUser , GuestUser> // { userId: number; macAddress: string; username: string; }

      const USER: T = {
        userId: 1001,
        macAddress: '58962535',
        username:'XIANA'
      }

      // console.log(USER.roles) // 错误 Property 'roles' does not exist on type 'Pick<SuperbUser, GuestUser>'.

     

     

  6.  Omit<T,K> 与 Pick相反 剔除类型T中存在的K类型后构建出一个新类型     该属性 在 TS 3.5.1 中添加,旧版本的 TS不支持。
    interface A { 
        x: number
        y: string
    }
    type T = Omit<A,'x'> // { y: number; }

     

 

标签:内置,string,number,interface,Typescript,类型,工具,type,属性
From: https://www.cnblogs.com/rose-sharon/p/17511735.html

相关文章

  • Gamma—设计精美高效协同的PPT工具
    介绍一款设计精美优雅、支持模块化编辑、提供高效协同的幻灯片工具封面功能设计精美优雅。好看,高颜值,这是Gamma给很多人的第一印象。Gamma提供了多种主题样式,方便用户快速设置。此外,内容输入支持自适应排版。用户只需要聚焦内容输入,PPT排版美化尽可交给Gamma.内容模......
  • linux http嗅探工具 httpry
    httpry是http版的tcpdump,它提供了实时的数据抓取、展示,也可以写入到文件,以供后续分析,相比较tcpdump,它抓取展示http更加直观。通常我们会抓取请求并写入文件httpry-i网卡名字-mmethod-b输出文件名字使用ifconfig命令查看网卡名字,如果不指定,默认是第一个网卡。-m指定http请求......
  • 工具 | conda命令的使用
    在Anaconda中创建新环境condacreate-nnamepython=3.7(python版本自己指定)指定路径下创建环境condacreate--prefix=F:\condaenv\env_namepython=3.7查看当前有哪些环境condaenvlist切换到新创建的环境condaactivate[环境名字]查看当前环境安装了哪些依赖c......
  • 《深入理解Java虚拟机第3版》垃圾收集器与内存分配策略、虚拟机性能监控故障处理工具
    目录往期博客:Java课堂篇3_初识JMM、常量池简单理解(字符串常量池、静态常量池、大整型常量池)为什么要了解垃圾收集和内存分配?如何判断对象已死?引用计数算法可达性分析算法JDK1.2之后引用的扩充回收方法区垃圾收集算法分代收集理论标记清除标记复制标记整理对象分配虚拟机......
  • typescript中 == 和 === 的区别
    在TypeScript中,==和===是用于比较两个值是否相等的操作符。 ==是相等比较操作符,它在比较值时进行隐式类型转换。它会尝试将两个操作数转换为相同类型,然后再进行比较。这种隐式类型转换可能会导致一些意想不到的结果。例如:console.log(1=="1");//trueconsole.log(t......
  • 15款备受推崇的K8S可视化工具,你都玩过哪些?
    对于那些热爱探索新技术、寻找简化操作方式的运维工程师来说,如何更好地管理和操作K8S集群?本篇将分享15款备受推崇的K8S可视化工具,让你轻松管理和操作集群中的各种资源。你可能已经玩过其中的一些工具,这将是一个与你分享经验的机会哦!备受推崇的15款KubernetesDashboard:http......
  • [渗透测试]—5.3 网络渗透测试技术和工具
    在本章节中,我们将学习一些常用的网络渗透测试技术和工具,如Wireshark、Ettercap等。我们会尽量将内容讲解得详细、通俗易懂,并提供尽可能多的实例。5.1WiresharkWireshark是一款免费的开源数据包分析器,可以实时或离线捕获、分析和解码网络数据包。Wireshark可以帮助我们识别网络......
  • 使用评价指标工具
    评估一个训练好的模型需要评估指标,比如正确率、查准率、查全率、F1值等。当然不同的任务类型有着不同的评估指标,而HuggingFace提供了统一的评价指标工具。1.列出可用的评价指标通过list_metrics()函数列出可用的评价指标:deflist_metric_test():#第4章/列出可用的评价指标......
  • 使用评价指标工具
    评估一个训练好的模型需要评估指标,比如正确率、查准率、查全率、F1值等。当然不同的任务类型有着不同的评估指标,而HuggingFace提供了统一的评价指标工具。1.列出可用的评价指标通过list_metrics()函数列出可用的评价指标:def list_metric_test():    # 第4章/列出可用的评......
  • GTD和掌握Omni系列效率工具
    说到时间管理我相信很多人都不陌生,但是真正能很好地管理好自己的时间的同学却屈指可数,有的人说与其花时间去做时间管理还不如尽可能的把时间花在做工作上,这就涉及到一个效率的问题,你是随随便便眉毛胡子一把抓想起什么就做什么效率高呢还是花5到10分钟做个时间规划再按照计划灵活分......