泛型定义个人理解:需要哦一个方法或者属性,不仅支持当前已知的类型,还要兼容未来有可能需要传入的类型,使方法变得灵活。泛型在声明时不定义类型在调用时才定义类型
泛型类基本用法
普通写法 要求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 }>()
泛型和类类型约束