[Day10] TS:什麼!Conditional Types 中還能建立型別?使用 infer 來實作 ReturnType 和 Parameters
今天會來說明 TypeScript 中內建 ReturnType
和 Parameters
的原始碼(像是上圖這樣),如果你已經可以輕鬆看懂,歡迎直接左轉去看我隊友們的精彩文章!
ReturnType 和 Parameters 的使用
一樣讓我們先來簡單了解 ReturnType 和 Parameters 這兩個 Utility Types 的使用。
ReturnType
ReturnType<T>
是 TypeScript 內建的 Utility Type,它能夠接受一個參數 T
,這個參數滿足「函式型別」的話(即,T 要是函式型別的子集合),則會回傳這個函式「回傳值的型別(return type)」;否則,就會回傳 any
。
來看一下官網提供的幾個範例:
type T1 = ReturnType<() => string>; // string
type T2 = ReturnType<(s: string) => number[]>; // number[]
- 第一個範例中,
ReturnType<T>
的<>
中帶入的是() => string
這個函式型別,因為這個函式會回傳string
,所以T1
會是string
。 - 第二個範例中,因為
(s: string) => number[]
會回傳number[]
,所以T1
會是number[]
。
如果帶入的型別不符合,則會回傳 any
:
type T3 = ReturnType<string>; // any
有個稍微特別的地方是,雖然 T3
的型別會是 any
,但 TypeScript 會在 string
的地方跳出錯誤提示,至於為什麼會這樣,等等看原始碼的時候就會瞭解了!