8.泛型

news2024/9/22 23:21:31

目录

1  基本使用

2  多个泛型

3  泛型约束

3.1  数组

3.2  extends约束

3.3  用泛型约束泛型

4  泛型接口

5  ts中的数组用的就是泛型

6  泛型类

7  常用泛型工具类型

7.1  让所有属性变为可选属性 Partial

7.2  将所有属性都变为只读属性 Readonly

7.3  从指定类型中提取若干个组成新类型 Pick

7.4  构造一个对象规则,一个参数是键名,第二个参数是值类型 Record


1  基本使用

我现在想定义一个函数规则,函数只有一个参数,规则是给参数什么类型的值,就返回什么类型的数据。这个时候直接将参数与返回值都置为any是约束不住的

这个时候我们可以使用泛型,使用泛型之后,像上面那样的函数你就定义不出来了。因为你用String就铁定是字符串类型了,但是泛型要求是活类型

  • <>内是泛型的名称,我这里使用something做名称,名称可自定

如果没报错就说明输入和输出是同一个类型

在使用的时候你可以选择不对泛型进行约束

不约束就相当于ts根据你给的参数进行类型推断

也可以对给泛型一个具体的类型

2  多个泛型

3  泛型约束

3.1  数组

像下面这样描述数组应该是个例,我试过改成个对象就不行了,而且你的数组中没法加内容,也无法指定数组中各元素的类型

我们想在想传入一个数组,但是默认情况下不让你使用length这个属性

那就只能给something约束为有length属性,比如数组

不一定所有的泛型都要带约束,我下面这个函数表示输入是一个数组,但输出不一定是一个数组

3.2  extends约束

我们更好理解的是extends,比如我下面让something属于 number或object或string

由于你使用了 或,还是有可能没有length属性

这个时候你可以继承一个数组

也可以继承一个有length属性的东西,比如自定义一个接口

3.3  用泛型约束泛型

比如我现在搞一个获取属性的方法,我约束something2必须为something1的键

我怕们上面没有对something1进行约束,所以你可以用其他的类型,比如数字型,数字型本身也是个对象,你可以用数字型中的属性

如果是可遍历的东西就把key当索引用

4  泛型接口

接口也可以使用泛型,比如我让接口Person上有泛型something,然后someone被Person约束,指定泛型类型为string

5  ts中的数组用的就是泛型

如果你的数组中都是数值,它就会提示你number

如果你的数组中都是字符串,它就会提示你string

按住ctrl然后点击forEach可以看到源码,在源码中使用的是名称为T的泛型

6  泛型类

泛型可以应用在类中的每一个变量

比如属性

比如方法

7  常用泛型工具类型

7.1  让所有属性变为可选属性 Partial

我现在用something规则约束对象a,此时对象a 必须 要拥有 something 的全部属性

我们对 规则something 进行 Partial 修饰 得到 规则something1。something1会把something中的规则都变为可选规则(相当于都加了一个问号),这样再创建对象a的时候就不必须有something的全部属性

7.2  将所有属性都变为只读属性 Readonly

先看不加Readonly的情况,不加Readonly所有的属性都是非只读属性,你可以对任何的属性进行修改

加了Readonly后,所有属性变为只读属性,这样就改不了了

7.3  从指定类型中提取若干个组成新类型 Pick

定义规则something,从something中提取id与title组成新属性something1。以something1为规则的实例对象只需要有id和title两个属性就行

7.4  构造一个对象规则,一个参数是键名,第二个参数是值类型 Record

我现在创造一个对象规则something,something的键名有 id name title。这三个键的属性需要是数字或字符串

如果你 id name title 每个都不一样,建议你搞个interface一个一个写上 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/823834.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

git-版本控制器

集中式版本控制工具&#xff08;不常用&#xff09; 版本库集中于中央服务器&#xff0c;team要联网才能工作&#xff08;下载代码&#xff09; SVN CVS 分布式版本控制工具 每个电脑上都有一个完整的版本库&#xff0c;工作时无需联网&#xff0c;可以把修改推送给其他人来…

ThreadLocal有内存泄漏问题吗

对于ThreadLocal的原理不了解或者连Java中的引用类型都不了解的可以看一下我的之前的一篇文章Java中的引用和ThreadLocal_鱼跃鹰飞的博客-CSDN博客 我这里也简单总结一下: 1. 每个Thread里都存储着一个成员变量&#xff0c;ThreadLocalMap 2. ThreadLocal本身不存储数据&…

python爬虫(四)_urllib2库的基本使用

本篇我们将开始学习如何进行网页抓取&#xff0c;更多内容请参考:python学习指南 urllib2库的基本使用 所谓网页抓取&#xff0c;就是把URL地址中指定的网络资源从网络流中读取出来&#xff0c;保存到本地。在Python中有很多库可以用来抓取网页&#xff0c;我们先学习urllib2。…

docker minio安装

1.介绍 Minio是一款开源的对象存储服务&#xff0c;它可以在任何硬件或云平台上提供高性能、高可用性和高安全性的存储解决方案。Minio最新版是2021年11月发布的RELEASE.2021-11-24T23-19-33Z&#xff0c;它带来了以下几个方面的改进和新特性&#xff1a; - 支持S3 Select AP…

Allegro选择暗显模式仍然无法实现暗显模式的解决办法

Allegro选择暗显模式仍然无法实现暗显模式的解决办法 用Allegro进行PCB设计的时候,时常需要使用到暗显模式,让视图中未被高亮的图形暗显下去,如下图 左边是未高亮的网络,右边是已高亮的 但是有时候因为一些原因,导致无法暗显,如下图 下面介绍如何解决这个问题,具体操作…

CSPM认证的价值?

最近 CSPM 证书很热门&#xff0c;含金量高&#xff0c;CSPM证书虽然发起的时间不长&#xff0c;但获取 CSPM 证书也是目前发展的一个趋势。如果打算在项目管理领域发展的强烈建议尽快获取 CSPM&#xff0c;提前为自己积攒一些资本。 一、什么是 CSPM证书&#xff1f;跟PMP是什…

Java-API简析_java.io.FileWriter类(基于 Latest JDK)(浅析源码)

【版权声明】未经博主同意&#xff0c;谢绝转载&#xff01;&#xff08;请尊重原创&#xff0c;博主保留追究权&#xff09; https://blog.csdn.net/m0_69908381/article/details/132038909 出自【进步*于辰的博客】 因为我发现目前&#xff0c;我对Java-API的学习意识比较薄弱…

elasticsearch 将时间类型为时间戳保存格式的时间字段格式化返回

dsl查询用法如下&#xff1a; GET /your_index/_search {"_source": {"includes": ["timestamp", // Include the timestamp field in the search results// Other fields you want to include],"excludes": []},"query": …

DevOps系列文章之 Docker 安装 NFS 服务器

Docker 安装 NFS 服务器 环境&#xff1a; 192.186.2.105 NFS 服务器 192.168.2.106 Client 客户端 安装 一、服务器端 https://github.com/f-u-z-z-l-e/docker-nfs-server 1、创建目录 mkdir /nfsdata mkdir -p /docker/nfs/2、启动脚本 vim start.sh# 内容 docker run …

ConCurrentHashMap常见面试题

1. JDK1.7和JDK1.8中ConCurrentHashMap的实现有什么不同&#xff1f; JDK1.7中的实现可以认为是大数组套小数组&#xff0c;大数组是Segment数组&#xff0c;小数组是HashEntry数组&#xff0c;锁是锁在大数组的元素上&#xff08;Segment&#xff09;&#xff0c;力度比较大&…

使用vs 2017 C#项目发布

C#项目发布 vs 2017 打包项目源代码 (发布)iis 配置添加ssl 配置 vs 2017 打包项目源代码 (发布) iis 配置 添加ssl 配置 https://help.aliyun.com/zh/ssl-certificate/user-guide/install-ssl-certificates-on-iis-servers

软考A计划-系统集成项目管理工程师-项目沟通管理-上

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例点击跳转>软考全系列点击跳转>蓝桥系列 &#x1f449;关于作者 专注于Android/Unity和各种游…

Java反射(三)

目录 1.反射与代理设计模式 2.反射与Annotation 3.自定义Annotation 4.Annotation整合工厂设计模式和代理设计模式 1.反射与代理设计模式 代理模式是指通过业务真实类实现业务接口&#xff0c;再通过设置代理类创建业务真实类子类从而间接访问业务真实类。但是这存在一个弊…

助你丝滑过度到 Vue3 组合式Api的优势新的组件 ②⑧

作者 : SYFStrive 博客首页 : HomePage &#x1f4dc;&#xff1a; VUE3~TS &#x1f4cc;&#xff1a;个人社区&#xff08;欢迎大佬们加入&#xff09; &#x1f449;&#xff1a;社区链接&#x1f517; &#x1f4cc;&#xff1a;觉得文章不错可以点点关注 &#x1f449;…

centos系统离线安装k8s v1.23.9最后一个版本并部署服务,docker支持的最后一个版本

注意&#xff1a;我这里的离线安装包是V1.23.9. K8S v1.23.9离线安装包下载&#xff1a; 链接&#xff1a;https://download.csdn.net/download/qq_14910065/88143546 这里包括离线安装所有的镜像&#xff0c;kubeadm&#xff0c;kubelet 和kubectl&#xff0c;calico.yaml&am…

微信小程序页面传值为对象[Object Object]详解

微信小程序页面传值为对象[Object Object]详解 1、先将传递的对象转化为JSON字符串拼接到url上2、在接受对象页面进行转译3、打印结果 1、先将传递的对象转化为JSON字符串拼接到url上 // info为对象 let stationInfo JSON.stringify(info) uni.navigateTo({url: /pages/statio…

引入联合GraphQL以解决系统架构中的问题

随着使用需求的增长&#xff0c;用户群的扩大以及新功能的引入&#xff0c;让工程师按照业务的主要领域进行组织变得不可避免。当这些领域在单个实体&#xff08;如类、服务、应用程序或代码库&#xff09;的层面变得过于庞大难以管理时&#xff0c;引入联合GraphQL成为优化系统…

任务通知

Q: 什么是任务通知&#xff1f; A: FreeRTOS 从版本 V8.2.0 开始提供任务通知这个功能&#xff0c;每个任务都有一个 32 位的通知值。按照 FreeRTOS 官方的说法&#xff0c;使用消息通知比通过二进制信号量方式解除阻塞任务快 45%&#xff0c; 并且更加省内存&#xff08;无需…

图为科技加入深圳市智能交通行业协会 ,打 …

图为科技加入深圳市智能交通行业协会&#xff0c;打造智能交通新生态&#xff01; 交通是国民经济发展的“大动脉”&#xff0c;交通拥堵、事故频发等问题不仅影响了人们的出行体验&#xff0c;也对经济的发展产生了负面影响。安全、高效、便捷的出行&#xff0c;一直是人们的…

策略路由实现多ISP接入Internet

组网需求&#xff1a; 企业分别从ISP1和ISP2租用了一条链路 PC3用户上网访问Server1时走ISP1PC4用户上网访问Server1时走ISP2 拓扑图 一、ISP1 运营商 R1路由器 <Huawei>sys [Huawei]sys R1 [R1]un in en[R1]int g0/0/0 [R1-GigabitEthernet0/0/0]ip addr 2.2.2.2 2…