11-学习TypeScript(泛型)

130 阅读1分钟

泛型用法

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)