TS泛型
代表广泛的类型
function identity<T>(arg:T):T{
    return arg
}
let string = identity('hi')
接口使用泛型
    function returnIt<T>(arg: T): T {
        return arg
    }
    interface Human {
        name: string
        age: number
    }
    let human = returnIt<Human>({ name: 'tom', age: 18 })
数组泛型
    interface Human {
        name: string
        age: number
    }
    function returnArray<T>(array: T[]): T[] {
        return array
    }
    let array = returnArray<string>(['a', 'b', 'c'])
    let humanArray = returnArray<Human>([{ name: 'tom', age: 18 }, { name: 'jack', age: 19 }])
泛型类型
    function returnIt<T>(arg: T): T {
        return arg
    }
    let myReturnIt: <T>(arg: T) => T = returnIt
    let myReturnIt2: { <T>(arg: T): T } = returnIt
泛型接口
    interface AnyAdd<T> {
        (a1: T, b1: T): T
    }
    let numberAdd: AnyAdd<number> = (a1: number, b1: number): number => {
        return a1 + b1
    }
    let stringAdd: AnyAdd<string> = (a2: string, b2: string): string => {
        return a2 + b2
    }
泛型约束
满足某些条件的约束
假如这样写,会报错,因为不一定有length,那么我们需要对泛型进行约束
    function returnIt<T>(arg: T): T {
        console.log(arg.length) //这里报错
        return arg
    }
引用接口,找到约束的类型
    interface hasLength {
        length: number
    }
    function returnIt<T extends hasLength>(arg: T): T {//T继承接口hasLength
        console.log(arg.length)
        return arg
    }
在泛型里使用类
 function create<T>(c: { new(): T }): T {
        return new c()
    }
看不懂?那先转化为js代码
    function create(c) {
        return new c()
    }
 function create<T>(c: { new(): T }): T {
        return new c()
    }
    class Human {
    }
    class Animal {
    }
    let tom = create<Human>(Human)
    let jack = create<Human>(Animal) //报错,因为是Human
版权声明:本博客所有文章除特殊声明外,均采用 CC BY-NC 4.0 许可协议。转载请注明出处 Roxas Deng的博客!