ts-泛型


function echo(arg:T):T{
  return arg
}

const result = echo("str")

function swap(arr:[T,U]):[U,T]{
  return [arr[1],arr[0]]
}
const result1 = swap(["str",123])

interface IWidthLength{
  length:number;
}
function echoWidthLength(arg:T):T{
  console.log(arg.length)
  return arg
}
const str = echoWidthLength("str")
const str1 = echoWidthLength({length:10})
const str2 = echoWidthLength([1,2,3])


class Queue {
  private data =[];
  push(item:T){
    return this.data.push(item)
  }
  pop():T{
    return this.data.shift()
  }
}
const queue = new Queue()
// queue.push(1)
queue.push("str")
console.log(queue.pop().length)

interface KeyPair {
  key:T;
  value:U;
}
let kp1 : KeyPair = {"key":123,value:"str"}

interface IPlus{
  (a:T,b:T):T
}
function plus(a:number,b:number):number{
  return a+b
}
function connect(a:string,b:string):string{
  return a+b
}
const a :IPlus = plus
const b :IPlus = connect