ts中的泛型

泛型

指在定义函数、接口或类的时候,不预先指定具体的类型,而在使用的时候再指定具体类型的一种特性。

function getArr<T>(value: T, count: number): T[]{

    const arr: Array<T> = [];

    for (let i = 0; i < count; i++){

        arr.push(value)

    }

    return arr

}

const arr5 = getArr<number>(3.1212, 4);

const arr6 = getArr<string>("aaa", 3);

console.log(arr5[0].toFixed(2));//3.12

console.log(arr6[0].split(""));//['a','a','a']

多个泛型参数的函数:

//多个泛型参数的函数

function getArr<K, V>(value1: K, value2: V): [K, V]{

    return [value1,value2]

}

const new1 = getArr<string, number>('tom', 123)

const new2 = getArr<number, boolean>(100.1111, true)

console.log(new2[0].toFixed(2));//100.11

console.log(new1[0]);//tom

泛型接口

在定义接口时, 为接口中的属性或方法定义泛型类型 ,在使用接口时, 再指定具体的泛型类型

//泛型接口

(() => {

    interface BaseCURD<T>{

    data: Array<T>

    add:(t: T)=> T

    getUserId:(id:number)=>T       

}

class User{

    id: number

    name: string

    age?: number

    constructor(id: number, name: string) {

        this.id = id;

        this.name=name

    }

}

class UserCurd implements BaseCURD<User>{

    data: Array<User> = []

    add(user: User): User{

        user.id = Date.now() + Math.random();

        this.data.push(user);

        return user

    }

    getUserId(id) {

        return this.data.find(user=>user.id===id)

    }

}

const uc: UserCurd = new UserCurd();

uc.add(new User(12, "zhangsan"))

uc.add(new User(13, "sss"))

    const { id, name } = uc.add(new User(14, "zhang"))

    console.log(id);

    console.log(name);

    console.log(uc.add(new User(15, "hang")));

    

})()

泛型类:

class Person<T>{

    defaultValue:T

    add:(x: T, y: T)=> T

}

const newP: Person<number> = new Person<number>();

newP.add=function(x,y){

    return x+y

}

console.log(newP.add(100,200));//300

泛型约束:

如果我们直接对一个泛型参数取length属性, 会报错, 因为这个泛型根本就不知道它有这个属性,所以可以利用泛型约束来实现下面这个例子就无法传number类型的数据,因为number没有length属性,会报错

//泛型约束

interface ILength{

    length:number

}

function getLength<T extends ILength>(x: T): number{

    return x.length

}

console.log(getLength<String>("iskdhybg"));//8
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值