Day 11 Generics Part 1

Generics 可以在我们定义型别时给予其他对於型别的资讯,例如说我们因为不确定会传进 function 的是什麽型别,所以先给一个通用型别,等要呼叫该 function 时再来定义要传进去的参数或是 return 值的型别,这让我们在写程序的时候更加的弹性,但同时又保有 TypeScript 的严谨性。

那就先从 function 开始吧!
https://ithelp.ithome.com.tw/upload/images/20210926/20131989zA0XtyGzEf.png
这边可以看到明明就已经把会回传物件的 merge() 存到 mergeObj 里面了,但是却没办法存取到 name 属性,因为 TypeScript 没办法辨识 name 属性是不是存在在 Object 型别里面,不过这个时候能够用 Generics 型别来帮忙。
https://ithelp.ithome.com.tw/upload/images/20210926/20131989DVlXp6kRVo.png
这个时候透过 Generics 型别先行给 merge() 的参数通用的型别,通常会从 T 开始,代表 Type,後面的引数就用定义好的 Generics 型别来做定义,等到真正带参数进去时,TypeScript 就会自动帮我们判断带入参数的型别,不会像是上面只会侦测到是 Object 了。
https://ithelp.ithome.com.tw/upload/images/20210926/201319896ZkYwiTCJ6.png
这时候如果要再存取 mergeObjname 就不会报错了,因为 Generics 型别给了额外的参数型别资讯,并且也不用让我们再额外定义引数的 objA 是什麽属性什麽型别,只要给它一个简单的 Generics 型别 T 就好了。
https://ithelp.ithome.com.tw/upload/images/20210926/20131989XnPytYfxDm.png

另外也能用 extends 关键字对 Generics 型别再作约束,去更加详细的定义它要是什麽型别,防止代入了不是预期中的型别的参数。

function merge<T extends Object, U>(objA: T, objB: U) {
  return Object.assign(objA, objB)
}

今天的学习笔记暂且到此,後续会再介绍 generics 的 classes,感谢阅读。:)


<<:  Android Studio初学笔记-Day11-Checkbox

>>:  【Day13】数据展示元件 - Accordion/Collapse 摺叠面板

Unity自主学习(二十二):物件移动(1)

昨天了解了Unity内建预设的方法是怎麽运行,以及差别 今天就照着目前所了解的来写能让物件可以照着键...

[Day 8] 设计UI画面-Figma

昨天已经把功能规画完了, 接下来就需要画成UI,前端开发时会比较方便 也避免程序写完後才发现画面不合...

[火锅吃到饱-19] 寿喜烧一丁 - 台中永春店 #甜点区也很赞~

这麽优质的店家,当然要推啦~(所以就再补一篇XD) 检查Youtube的影片,发现有漏网之鱼,这样不...

[Day11] Custom HTML5 Video Player

[Day11] Custom HTML5 Video Player 影片播放控制器 需要用到的技巧与...

Day26. Blue Prism取号一把罩–BP自动取得订单编号

一般订购的程序都是由下订单开始, 接着取单号为依据来分批或批次采购相关物资, 因此订单编号有举足轻重...