Typescript 泛型归纳

// 泛型
/*
  泛型的关键目的是在成员之间提供有意义的约束,可以是
    - 类的实例成员
    - 类的方法
    - 函数参数
    - 函数返回值
*/

// 不使用泛型将只能规定特定类型
class Queue {
  private data: number[] = []
  push = (item: number) => this.data.push(item)
  pop = () => this.data.shift
}

const queue = new Queue()
queue.push(1)

// 使用泛型
class Queue1<T>{
  private data: T[] = []
  push = (item: T) => this.data.push(item)
  pop = (): T => this.data.shift() as any as T
}

const queue1 = new Queue1<number>()
queue1.push(32)
const queue2 = new Queue1<string>()
queue2.push('321')
console.log(queue1.pop()); // 32
console.log(queue2.pop()); // '321'

function reverse1<T>(items: T[]): T[]{
  const toReturn:T[] = []
  items.forEach(item => { toReturn.unshift(item) })
  return toReturn
}

const reversed1 = reverse1([1, 2, 3, 4])
console.log(reversed1[0]);
reversed1[0] = 3
// reversed1[1] = '32' // error

class Utility{
  reverse<T>(items: T[]): T[]{
    const toReturn:T[] = []
    items.forEach(item => { toReturn.unshift(item) })
    return toReturn
  }
}

/**
 * 你可以随意调用泛型参数,当你使用简单的泛型时,泛型常用 T 、 U 、 V 表示。如果在你的
参数里,不止拥有一个泛型,你应该使用一个更语义化名称,如 TKey 和 TValue (通常情况
下,以 T 做为泛型前缀也在如 C++ 的其他语言里做为模版。
 */

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

放逐的程序猿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值