Generics 可以在我们定义型别时给予其他对於型别的资讯,例如说我们因为不确定会传进 function 的是什麽型别,所以先给一个通用型别,等要呼叫该 function 时再来定义要传进去的参数或是 return 值的型别,这让我们在写程序的时候更加的弹性,但同时又保有 TypeScript 的严谨性。
那就先从 function 开始吧!
这边可以看到明明就已经把会回传物件的 merge()
存到 mergeObj
里面了,但是却没办法存取到 name
属性,因为 TypeScript 没办法辨识 name
属性是不是存在在 Object 型别里面,不过这个时候能够用 Generics 型别来帮忙。
这个时候透过 Generics 型别先行给 merge()
的参数通用的型别,通常会从 T 开始,代表 Type,後面的引数就用定义好的 Generics 型别来做定义,等到真正带参数进去时,TypeScript 就会自动帮我们判断带入参数的型别,不会像是上面只会侦测到是 Object 了。
这时候如果要再存取 mergeObj
的 name
就不会报错了,因为 Generics 型别给了额外的参数型别资讯,并且也不用让我们再额外定义引数的 objA
是什麽属性什麽型别,只要给它一个简单的 Generics 型别 T 就好了。
另外也能用 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内建预设的方法是怎麽运行,以及差别 今天就照着目前所了解的来写能让物件可以照着键...
昨天已经把功能规画完了, 接下来就需要画成UI,前端开发时会比较方便 也避免程序写完後才发现画面不合...
这麽优质的店家,当然要推啦~(所以就再补一篇XD) 检查Youtube的影片,发现有漏网之鱼,这样不...
[Day11] Custom HTML5 Video Player 影片播放控制器 需要用到的技巧与...
一般订购的程序都是由下订单开始, 接着取单号为依据来分批或批次采购相关物资, 因此订单编号有举足轻重...