[筆記] TS keyof typeof 到底怎麼用?

janlin002
4 min readSep 2, 2023
Photo by Fahrul Razi on Unsplash

開始前推薦大家可以去 TypeScript playground 自己試玩看看

在了解 keyof typeof 怎麼使用之前,須先暸解這兩個各自的用法

typeof

typeof 的全名其實是 Typeof Type Operator,並且 TypeScript 中還是可以使用正常的 typeof 的

相信有在寫 JavaScript 對於 typeof 一定不會陌生,就是基本的型別確認,不過在 TypeScript 中 typeof 有另外一種用法

相信各位在寫 Typescript 型別時,會遇到同樣有相同資料結構的時候,但如果每次都要重新寫一次會顯得非常麻煩,使用 typeof 以後就可以提取變數或屬性的類型,並使用該類型來聲明其他變數

下面我們來實際使用一下 typeof:
我們先建立一個基本的 a

這時候 Vscode 會自動推倒出他的型別

這時候如果我們想要建立一個 b 型別,並且想跟 a 擁有同一樣的型別,這時候就可使用 typeof

keyof

看完 typeof 後,我們再來暸解一下 keyof

我們都知道 Object 是一個 key-value 的組合

const Person = {
name: 'jan'
}

name: key
jan: value

所謂的 keyof 就是對我們的 key 做提取的動作

我們直接看程式碼會比較容易了解:

我建立了 Jan 並且使用 Person 的 key,當滑鼠移到 Jan 時,會顯示:

感覺有講沒講一樣,不過如果使用一個變數,並且指定型別為 Jan 時,有趣的事情發生了:

這時候 Vscode 自動推斷 me 是 name 或是 age,如果使用其他字串的話就會報錯

keyof typeof

暸解 typeof 跟 keyof 後,我們試著把他們組起來,我們先想想看,這兩個組起來應該會有什麼效果?

從原始物件中提取出 型別(typeof),然後將型別的 key 取出來使用在新的變數上(keyof)

好拉,今天的文章就到這,簡單的介紹了 tyoeof, keyof, keyof typeof 的使用方法

參考文章

--

--