泛型:在定义函数,接口,类的时候不能预先确定要使用的数据的类型,而是在使用函数,接口,类的时候才能确定数据的类型。
function getArr<T>(value:T,count:number):T[]{
//根据数据和数量产生一个数组
const arr:Array<T>=[];
for(let i=0; i<count;i++){
arr.push(value)
}
return arr
}
const arr1=getArr<number>(10,5)
const arr2=getArr<string>('123',4)
多个泛型参数的函数:函数中有多个泛型的参数
function getMsg<T,V>(value1:T,value2:V):[T,V]{
return arr[value1,value2]
}
const arr1=getMsg<string,number>('10',5)
const arr2=getMsg<string,number>('123',4)
泛型接口
通过一个类的实例对象调用add方法可以添加多个用户信息对象,调用getUserId方法可以根据id获取某个指定的用户信息对象
//定义一个泛型接口
interface IBbaseCRUD<T>{
data:Array<T>
add:(t:T)=>T
getUserId:(id:number)=>T
}
// 定义一个用户信息的类
class User{
id?:number//用户的id。?代表此属性可有可无
name:string//用户的姓名
age:number//用户的年龄
constructor(name:string,age:number){
this.name=name
this.age=age
}
}
//定义一个类,可以陈队用户的信息对象进行增加以及查询的操作
class UserCRUD implements IBbaseCRUD<User>{
//用来保存多个User类型的用户信息对象
data:Array<User>=[]
//方法用来存储用户信息对象
add(user:User):User{
// 产生id
user.id=Date.now()+Math.random()
//把用户信息对象添加到data数组中
this.data.push(user)
return user
}
//根据id查询指定的用户对象
getUserId(id:number):User{
return this.data.find(user => user.id===id)
}
}
const userCRUD:UserCRUD=new UserCRUD()
userCRUD.add(new User('wy',18))
console.log(userCRUD.getUserId(123))
泛型类
class GenericNumber<T>{
defaultValue:T
add:(x:T,y:T)=>T
}
//在实例化对象的时候,再确定泛型的类型
const g1:GenericNumber<number>=new GenericNumber<number>()
g1.defaultValue=100
g1.add=function(x,y){
return x+y
}