ts中泛型、泛型类、接口泛型的基本使用

127 阅读1分钟

泛型定义个人理解:需要哦一个方法或者属性,不仅支持当前已知的类型,还要兼容未来有可能需要传入的类型,使方法变得灵活。泛型在声明时不定义类型在调用时才定义类型

泛型类基本用法

普通写法  要求add函数传入什么类型参数  返回什么类型参数

function  add<T>(val:T):T{
return  T
}
add<number>(88)// 传入数字类型   返回数字类型
interface inter {
    eat(who?: string | number): any
}
class Person<T> implements inter {
    eat(who: any): T {
        return who
    }
    list: T[] = []
    add(item: T) {
        this.list.push(item)
    }
    f(): T {
        let i = this.list[0]
        for (var item = 0; item < this.list.length; item++) {

            if (i > this.list[item]) {
                i = this.list[item]
            }
        }
        return i
    }
}
let p = new Person<number>()
p.add(2)
let m = new Person<string>()
m.add("是小白")

泛型接口节本用法

简单用法   函数类型接口 
interface Root {
    <T>(name: T): T
}

let getData: Root = function <T>(name: T): T {
    return name
}

console.log(getData<number>(888))


//  泛型在 类里面的使用    对泛型的约束
interface ClassYS {
    name?: string
    age: number
}

class Animal<T extends ClassYS>{
    eat(par: T) {
        //   这样使用泛型不会报错    因为扩展
        console.log(par.name ? '有名称' : "没有名称");
    }
}
let k = new Animal<{ age: 90 }>()

泛型和类类型约束

image.png