TS泛型在函数、接口、类中使用介绍

一、泛型是什么?有什么作用


当我们定义一个变量不确定类型的时候有两种解决方式:

1、使用any
使用any定义时存在的问题:虽然 以 知道传入值的类型但是无法获取函数返回值的类型;另外也失去了ts类型保护的优势
2、使用泛型
泛型指的是在定义函数/接口/类型时,不预先指定具体的类型,而是在使用的时候在指定类型限制的一种特性。
 

二、使用

1、在函数中使用泛型

function echo<T>(arg:T):T{
    return arg
}
const result=echo(true)


function swap<T,U>(arg:[T,U]):[U,T]{
    return [arg[1],arg[0]]
}

const result2=swap(['string',123])
result2[1].charAt(0)

2、在类中使用泛型

事例1

class Animal<T> {
 name:T;
 constructor(name: T){
  this.name = name;
 }
 action<T>(say:T) {
   console.log(say)
 }
}
let cat = new Animal('cat');
cat.action('mimi')

事例2 

class Queue<T>{
    private data:T[]=[];
    push(item:T){
       return this.data.push(item)
    }
    pop(){
        return this.data.shift()
    }
}
const queue=new Queue<number>()
queue.push(1)
console.log(queue.pop()?.toFixed())

const queue2=new Queue<string>()
queue2.push('12')
console.log(queue2.pop()?.length)

3、泛型在接口中使用  

interface KeyPair<T,U>{
    key:T,
    value:U
}
let kp1:KeyPair<number,string>={key:1,value:'string'}
let kp2:KeyPair<string,number>={key:'abc',value:12}
let arrTow:Array<number>=[1,2,4]

4、约束泛型

interface IWithLength{
    length:number
}

function echoWidthLength<T extends IWithLength>(arg:T):T{
    console.log(arg.length)
    return arg
}
//这样子参数就只能传带有length属性的啦
const str=echoWidthLength('str')
const obj=echoWidthLength({length:10,width:10})
const arr=echoWidthLength([1,2,3])

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值