Day 12 Generics Part 2

今天要介绍的是 generic classes

https://ithelp.ithome.com.tw/upload/images/20210926/201319896BYtsRwGHK.png
上面可以看到出现了很多错误,因为 dataitem 都没有定义型别,TypeScript 不知道传进来的东西到底是什麽,但是其实我们并没有很在意 class 到底会是什麽型别,这时就可以用 generic 型别帮忙了。

class DataStorage<T> {
  private data: T[] = []

  addItem(item: T) {
    this.data.push(item)
  }

  removeITem(item: T) {
    this.data.splice(this.data.indexOf(item), 1)
  }

  getItems() {
    return [...this.data]
  }
}

其实概念跟前面的 generic function 很像,都是先定义一个通用型别给 function 或是 class,等到真正要呼叫函式或是创建一个新的实例时再依照呼叫的函式跟创建的实例去决定型别,保有了非常高的弹性,但是一样有规范到型别。

上一篇在 generic function 定义了两个 generic 型别,当时我有点疑惑那跟 union 型别差在哪里,因为都可以接收不一样的型别。後来看了一下课程以及文件的解释,generic 型别是定义一整个 function 或是 class 的型别,比如说决定该 function 接收的参数是字串了那就都会是字串,但是 union 型别在於它是规范可以接收两种以上的型别,但没特别说一定要使用哪一种才行。

今天的学习笔记就到这边,谢谢阅读~:)


<<:  day27 : k8s backup/restore/migrate with velero(下)

>>:  30天学会C语言: Day 11-什麽都可以取名字

Day16:[搜寻演算法]Binary search - 二分搜寻法

利用将资料切一半的方式来做搜寻,举例来说,如果要从数字1–100猜终极密码,如果采用线性搜寻法就是...

Day23 - 使用 Kamiflex 生成 Flex Message

LINE Developers:https://developers.line.biz/zh-ha...

Day 25: Macie 简介及操作

What is Amazon Macie? Macie是一项全代管的服务,它透过机器学习来辨别你的S...

Day19-React Router 篇-下篇

这篇要来介绍 React router v5 加入的几个 hook,包括 useParams、use...

Day30 Open-Match 使用与参赛心得

很开心能够完成 30天的 Open-Match 文章分享,其实中间有些东西,是我一边研究一边写出来的...