[Day07] TS:什麼是 Utility Types?
上面這個是今天會提到的內容,如果你已經可以輕鬆看懂,歡迎直接左轉去看我同事 Andy 「前端工程師學習 DevOps 之路」的精彩文章!。
昨天我們整合了過去所學的知識寫了一個函式,後面我們會提到更多 TypeScript 中用來建立 Utility Types 所需的知識,但今天讓我們繼續熟悉前幾天學到的內容,並試著建立一些常用的 Utility Types 吧!
前幾天學到的:
- 泛型(generics)的使用
- 使用
extends
限制泛型 keyof
的使用- Indexed Access Types 的使用
Utility Types 是什麼
一般寫程式時,或多或少會寫過一些 utility function,它們就像小工具,可以接受 input 然後做了某些處理後回傳 output,舉例來說,以阿拉伯數字作為 input,接著以中文的數字作為 output;或者以字串作為 input,根據某些字元拆成陣列後作為 output。不管功能是什麼,這種「小工具」類,有 input 和 output 的函式,就可以稱作 utility。
除了函式之外,在 TypeScript 中,也有不少處理型別的小工具可以使用,和前面提到的 utility functions 最大的不同在於,代入 Utility Types 的 input 會是 TypeScript 的「型別」,而不是一般的 JavaScript value,也就是說,Utility Types 會以「型別」作為 input,並且以另一個「型別」作為 output,也就是說,Utility Types 就像函式一樣可以帶入 input 得到 output,透過 Utility Types 將可以「根據一個型別,來建立出另一個型別」。
Utility Types 有時也稱作 Type Function,TypeScript 本身就有許多內建的 Utility Types,像是 Partial
、Required
、Record
、...等等。這裡我們先來看一下比較基本的,先對 Utility Types 有一點感覺,等後面學到更多知識後,再來看其他更進階的。