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