8.泛型

本文详细介绍了TypeScript中的泛型概念,包括基本使用、多个泛型、泛型约束(如数组和extends)、用泛型约束泛型、泛型接口、数组泛型、泛型类以及常用的泛型工具类型(如Partial、Readonly、Pick和Record)。通过实例展示如何在实际编程中灵活运用泛型确保类型安全。
摘要由CSDN通过智能技术生成

目录

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一个一个写上 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Suyuoa

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值