基本型別
型別註記(type annotation)用 : 型別 標在變數、參數或回傳值後面,告訴編譯器「這裡只能放這種值」。這一頁把最常用的幾種型別走一遍。
基本純量型別
寫成常值時,TypeScript 通常能自動推論(inference)出型別,不用每個變數都手動標:
實務上:能推論就不多寫,只在推論不出來(例如函式參數)或想明確限制時才加註記。
陣列與 Tuple
let scores: number[] = [90, 85, 77]
let names: Array<string> = ["Alice", "Bob"] // 跟 string[] 等價,兩種寫法都常見
// Tuple:固定長度、每個位置型別可以不同
let point: [number, number] = [3, 4]
一般清單用陣列;「兩三個固定位置、各自代表不同意義」的資料才用 tuple,例如座標或 [key, value] 配對。
聯合型別(Union)與字面值型別(Literal)
let id: string | number = "abc123"
id = 456 // 也合法,因為型別是 string 或 number 的聯合
type Status = "loading" | "success" | "error"
let state: Status = "loading"
// state = "done" // 編譯錯誤:不在允許的字串清單裡
Union(|)表示「這個值可能是這幾種型別之一」;字面值型別把型別限制在幾個固定的字串或數字,常用來取代傳統寫法裡容易打錯字的字串常數,也是後面 型別縮小 的基礎。
any、unknown、never
| 型別 | 意思 | 什麼時候用 |
|---|---|---|
any |
關掉型別檢查,什麼都能放、什麼都能呼叫 | 盡量避免;只在真的無法標註型別(如過渡期的舊程式碼)時暫用 |
unknown |
跟 any 一樣什麼都能放,但用之前必須先縮小型別才能操作 |
處理外部輸入(API 回應、JSON.parse 結果)時比 any 安全 |
never |
不會有值的型別,通常出現在一定會丟例外或無窮迴圈的函式回傳型別 | 較少手動寫,多半是編譯器推論出來 |
function parseInput(input: unknown) {
if (typeof input === "string") {
return input.toUpperCase() // 這裡 TS 已經知道 input 是 string
}
return String(input)
}
unknown 逼你先做型別檢查(如 typeof)才能用該值,比隨手用 any 安全很多,是官方建議取代 any 的預設選擇。
enum(列舉)
enum 把一組相關的固定選項命名成一個型別。新專案很多時候會改用「字串聯合型別」(如上面的 Status)取代 enum,因為編譯後產出的 JS 更精簡、也不會有 enum 特有的一些邊界案例;兩種寫法都常見,看專案慣例。
相關影音
微軟官方頻道 Matt Pocock 這段完整走過基本型別、聯合型別與 unknown,對應本頁大部分內容,已嵌在 核心語法總覽。想看 Net Ninja 逐集慢慢講基本型別、物件與陣列,可到 影音教學 對照播放清單。