一、泛型的定义以及作用
泛型能够帮助typescript的使用更加健壮和灵活
需求
根据需求生成自定义的数组长度,并且能够根据数据类型判断其是否具有某种属性
function setArr(x:any,y:number):any[] {
return new Array(y).fill(x)
}
let res=setArr('abc',5).map(item=>item.length)
console.log(res)
// 泛型
function setArr<T>(x:T,y:number):T[] {
return new Array(y).fill(x)
}
// let res=setArr<string>('abc',5).map(item=>item.length)
let res=setArr(3,5).map(item=>item.length)
console.log(res)
注意点
- 泛型能够帮助typescript更加健壮和灵活,并产生相应的提示。
- 如果再使用函数的时候,没有首先标记泛型,那么泛型的类型会根据传入的参数类型来判断
二、泛型约束
需求
使用接口来限制反省可以传入的变量的等
interface lengthInterface{
length:number
}
function setArr<T extends lengthInterface>(x:T,y:number):T[] {
return new Array(y).fill(x)
}
let res=setArr<string>('abc',5).map(item=>item.length)
console.log(res)
三、泛型类型参数
一个泛型受限于另一泛型
function setObj<T , K extends keyof T>(obj:T,key:K):any{
return obj[key]
}
let obj={
a:'a',
b:'b',
}
console.log(setObj(obj,'c'))//会报错