[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 有一點感覺,等後面學到更多知識後,再來看其他更進階的。