admin 管理员组

文章数量: 1184232

泛型

在定义函数,接口,类的时候不能预先确定要使用的数据的类型

    function getArr<T>(value: T, count: number): T[] {
        let arr: Array<T> = []
        for(let i = 0; i < count; i++) {
            arr.push(value)
        }
        return arr
    }
    let arr1 = getArr<number>(1, 3)
    let arr2 = getArr<string>('2', 3)
    console.log(arr1)
    console.log(arr2)

多个泛型参数的函数

    function getMsg<K,V>(value1: K, value2: V): [K, V] {
        return [value1, value2]
    }

    let arr1 = getMsg<string, number>('jack', 100)
    console.log(arr1)

泛型接口

泛型接口:在定义接口时,为接口中的属性或方法定义泛型类型

    // 定义一个泛型接口
    interface IBaseCRUD<T> {
        data: Array<T>
        add: (t: T) => T
        getUserId: (id: number) => T
    }

泛型类

    class GenericNumber<T> {
        // 默认得属性的值的类型是泛型类型
        defaultValue: T
        add: (x: T, y: T) => T
    }

    let g1: GenericNumber<number> = new GenericNumber<number>()
    g1.defaultValue = 100
    g1.add = function (x, y) {
        return x + y
    }
    console.log(g1.add(10, 20))

泛型约束

如果我们直接对一个泛型参数 length 属性,会报错,因为这个泛型根本就不知道它有这个属性

    interface ILength {
        length
    }
    function getLength<T extends ILength>(x: T): number {
        return x.length
    }

    console.log(getLength<string>('Hello'))

本文标签: Typescript 泛型