泛型

34 阅读2分钟

泛型

软件工程中,我们不仅要创建一致的定义良好的API,同时也要考虑可重用性。 组件不仅能够支持当前的数据类型,同时也能支持未来的数据类型,这在创建大型系统时为你提供了十分灵活的功能。

在像C#和Java这样的语言中,可以使用泛型来创建可重用的组件,一个组件可以支持多种类型的数据。 这样用户就可以以自己的数据类型来使用组件。

================================================================

当我们定义一个身份函数时(身份函数,简单的说就是输入什么就输出什么)

image.png

我们给arg参数 和 返回值同时定义了number, 但是当我们不确定要传入的内容是什么类型是时, 虽然我们可以传入any ,

image.png

但是,我们传入的值如果时字符串时,返回值却可以是数字,布尔值,这与我们的初衷并不符合

这时我们就可以用泛型来捕获参数的类型

image.png

这是 我们参数的type类型就和返回值的type类型相同了

我们可以直接再调用的时候标明问传递的数据类型

image.png

我们也可以利用参数类型推断 (在较为复杂的例子中可能不适用)

image.png

注意

image.png

当我们使用length方法(或者类似情况)时,虽然数组,字符串都有length方法,但是参数是数字,数字没有lenth方法,那么,此时代码就会发生报错,因为它无法确定你传来一定不是number。

我们可以通过一些手段解决这个问题。

我们可以将type规定为某种类型。比如说数组类型,即 “对象的泛型”。(返回值也要改动)

image.png

泛型类型、泛型接口

image.png

image.png

image.png

泛型类

泛型类 和 泛型接口比较相似,泛型类就是在类的名称的后面 加上尖括号,去写一下泛型参数的列表

image.png

泛型约束

具体的定义方法,就是,我们定义一个函数,在函数后面加一个泛型 通过extends 去约束type,让他具有某个属性,比如lengthwise

image.png

简单举例

image.png

在泛型约束中使用类型参数。 我们可以生命一个受另一个类型参数约束的类型参数

image.png

比如定义一个key,key泛型去扩展或受另一个type类型的约束

实例演示

image.png

在泛型中使用类类型

在typeScript中,使用泛型来构建工厂函数的时候,有必要通过他的构造函数来引用类的类型

举个例子

image.png

比如这个函数create 传入了一个叫做type的泛型,他的返回值也是一个type,函数中 new c 也就是说,c是一个类类型,那么我们在传入c的时候就休要给c定义类型。

实例

image.png