typescript中的泛型

版权声明: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)

猜你喜欢

转载自blog.csdn.net/bus_lupe/article/details/85393446