泛型用法
function arrT0(a:number,b:number):Array<number>{
return [1]
}
function arrT1(a:string,b:string):Array<string>{
return ['1']
}
function arrT2<T>(a:T,b:T):Array<T>{
return [a,b]
}
console.log(arrT2('3','2'))
function arrT3<T,U>(a:T,b:U):Array<T|U>{
let param:Array<T|U> = [a,b]
return param
}
接口泛型
❌写法
function getLength<T>(arg:T){
return arg.length //类型“T”上不存在属性“length”
}
✅写法
interface Len {
length:number
}
function getLength<T extends Len>(arg:T){
return arg.length
}
console.log(getLength('3'))
console.log(getLength([1,2,3]))
使用keyof约束对象
function getKey<T,K extends keyof T>(obj:T,key:K):any{
return obj[key]
}
let obj2 = {a:1,b:2}
console.log(getKey(obj2,'d')) //类型“"d"”的参数不能赋给类型“"a" | "b"”的参数
泛型类
class Add<T>{
mon:T[] = []
add(a:T):T[]{
return [a]
}
}
let a =new Add<string>()
let a1 =a.add('3')
console.log(a1)