版权声明:17602128911 https://blog.csdn.net/bus_lupe/article/details/85393446
泛型:软件工程中,我们不仅要创建一致的定义良好的API,同时也要考虑可重用性。组件不仅能够支持当前的数据类型,同时也能支持未来的数据类型,这在创建大型系统时为你提供了十分灵活的功能。
在像C#和Java这样的语言中,可以使用泛型来创建可重用的组件,一个组件可以支持多种类型的数据。这样用户就可以以自己的数据类型来使用组件。
通俗理解:泛型就是解决类、接口的复用性、以及对不特定数据类型的支持。
泛型:可以支持不特定的数据类型
要求:传入的参数和返回的参数一致
T表示泛型,具体什么类型是调用这个方法的时候决定的
泛型定义,泛型函数
function getInfo<T>(value:T):T{
return value
}
getInfo<Number>(123)
getInfo<string>('alex')
传入参数校验,返回任意类型
function getInfo<T>(value:T):any{
return 911
}
getInfo<Number>(123)
getInfo<string>('alex')
泛型类:比如有个最小堆栈算法,需要同时支持返回数字和字符串两种类型。通过类的泛型来实现。
求数组的最小值:
class MinClass {
public arr:number[] = []
add (num) {
this.arr.push(num)
}
min () {
let minNum = this.arr[0]
for (let i = 1; i < this.arr.length; i++) {
if (minNum > this.arr[i]) {
minNum = this.arr[i]
}
}
return minNum
}
}
let m = new MinClass()
m.add(12)
m.add(1)
m.add(2)
m.add(52)
m.add(29)
m.add(13)
console.log(m.min())
class MinClass<T> {
public arr:T[] = []
add (num:T) {
this.arr.push(num)
}
min ():T {
let minNum = this.arr[0]
for (let i = 1; i < this.arr.length; i++) {
if (minNum > this.arr[i]) {
minNum = this.arr[i]
}
}
return minNum
}
}
let m = new MinClass<number>()
m.add(52)
m.add(29)
m.add(13)
console.log(m.min())
let m2 = new MinClass<string>()
m2.add('a')
m2.add('b')
m2.add('c')
console.log(m2.min())
泛型接口
interface configFn {
<T>(value:T):T
}
let myFn:configFn = function <T>(value:T):T {
return value
}
myFn<string>('sfdd')
myFn<number>(1232)
interface configFn<T> {
(value:T):T
}
function getData<T> (value:T):T {
return value
}
let myFn1:configFn<string> = getData
myFn1('addf')
let myFn2:configFn<number> = getData
myFn2(911)