Skip to content

Type Guard

型別守衛

01你是不是遇到這個 / THE SYMPTOM

我有個變數可能是好幾種型別(字串、null、物件…),我想先檢查它「到底是哪一種」,檢查完之後 TypeScript 就會自動知道它是那一種、讓我安全地用它的屬性,不要再一直紅字說「可能是 undefined」。

↑ 如果你點頭了,你要的關鍵字就是 Type Guard

02這是什麼 / DEFINITION

一段「會在執行時檢查值的型別」的程式碼(如 typeof、instanceof、in、或自訂的 isXxx 函式),用來讓 TypeScript 在那個分支內把型別「縮小」到更精確的型別。

03什麼時候用 / WHEN TO USE

當一個值是聯合型別(A | B | null),你需要先確認它是哪一種、再針對那一種做不同處理時;尤其想消除「物件可能為 null/undefined」的型別錯誤、又不想硬用 as 強轉時。

04怎麼跟 AI 說 / HOW TO ASK

直接複製這句、貼進 Claude Code / Cursor / Copilot / ChatGPT:

幫我寫一個 type guard 函式 isUser(value): value is User,用它在處理前先收窄型別,不要用 as 強制轉型。
05常見坑 / WATCH OUT

自訂 type guard 的回傳型別要寫成 `value is User`(型別述詞 type predicate),只寫 boolean 不會觸發型別收窄。另外用 `as` 強轉只是騙過編譯器、執行時不會真的檢查,type guard 才是真的有檢查。

06相關的詞 / RELATED