TypeScript 最重要的核心觀念之一,就是「型別」。
型別決定了你的變數可以放什麼樣的資料,寫對型別,程式碼會更安全、更容易讀、也更不容易出錯。
TypeScript 的型別分成兩大類:原始型別(Primitive Types) 和物件型別(Object Types)。
這篇文章會把七種原始型別一次講清楚,每一種都附上範例。
不過在認識這些型別之前,要先了解一個觀念:型別標註(Type Annotation)。
型別標註(Type Annotation):告訴 TypeScript「這是什麼型別」
TypeScript 跟 JavaScript 最大的差別,就是你可以在程式碼裡「標註」每個值的型別。
最常見的用法是在變數上加標註——在變數名稱後面加上冒號 :,再寫上型別名稱:
let name: string = "小明";
let age: number = 25;
let isActive: boolean = true;: string、: number、: boolean 就是型別標註。
有了這些標註,TypeScript 就會幫你「把關」——如果你不小心把數字塞進一個標註為 string 的變數,它會直接報錯,不用等到程式跑起來才發現問題:
let name: string = "小明";
name = 123; // ❌ 錯誤:Type 'number' is not assignable to type 'string'這就是型別標註最大的好處:錯誤在寫程式的時候就會被抓出來,而不是等到使用者操作時才爆掉。
型別標註不是只能用在變數上,函式的參數和回傳值也可以標:
function add(a: number, b: number): number {
return a + b;
}a: number 和 b: number 是參數的型別標註,最後面的 : number 是回傳值的型別標註。
物件和陣列也能標:
let user: { name: string; age: number } = {
name: "小明",
age: 25,
};
let scores: number[] = [90, 85, 100];這些進階的用法會在後面的文章詳細介紹,這裡只要知道「型別標註可以用在很多地方」就好。
現在你知道怎麼標註型別了,接下來就來認識 TypeScript 裡最基本的七種原始型別。
最常用的三種原始型別:number、string、boolean
這三種是寫 TypeScript 時最常碰到的型別,幾乎每個程式都會用到。
number:所有數字都歸它管
不管是整數、小數、正數還是負數,TypeScript 都用 number 這一個型別來處理。
let age: number = 12;
let price: number = 49.99;
let temperature: number = -5;不像某些程式語言會把整數和浮點數分開,TypeScript 的 number 全部包辦。
只要是數字,用 number 就對了。
string:處理文字的型別
string 用來存放文字資料,可以是一個字、一句話、甚至只有一個字母。
只要內容放在引號裡面,就是 string。
let firstName: string = "Alice";
let message: string = "Welcome to TypeScript";雙引號 " " 和單引號 ' ' 都可以用,效果一樣。
boolean:只有 true 和 false 兩種值
boolean 是最單純的型別,只能是 true(是)或 false(否)。
let isLoggedIn: boolean = true;
let hasPermission: boolean = false;通常用在「判斷某件事有沒有成立」的情境,例如使用者有沒有登入、有沒有權限。
表示「沒有值」的型別:null 和 undefined
這兩種型別都代表「沒有值」,但背後的意思完全不同。
用一個生活中的例子來說明:想像你在填一份表單,上面有一欄「中間名」。
如果你沒有中間名,你會在那一欄寫上「無」——這就是 null,你做了決定,讓它是空的。
但如果你直接跳過這一欄沒填,它就會維持原本的空白狀態——這就是 undefined,根本還沒有人動過它。
null:「我看過了,決定讓它是空的」
null 是你主動寫進去的值,代表你已經處理過這個變數,而你的決定就是「讓它為空」。
let middleName: null = null;常見的使用情境:使用者登出後,你把原本存著使用者資料的變數設成 null,代表「資料已經被清除了」。
undefined:「還沒有人動過它」
嚴格來說,undefined 本身就是一個值——只是它代表的意思是「這個變數還沒被賦予有意義的內容」。
它是 TypeScript 的「預設佔位符」:只要你宣告了變數卻沒有用等號賦值,它的值就會自動是 undefined。
let score: undefined = undefined;重點在於:null 是你「做了決定」後的結果,undefined 是「還沒做任何決定」的狀態。
延伸閱讀:JavaScript 的 null 和 undefined 是什麼?兩種空值的差異
特殊原始型別:symbol 和 bigint
這兩種型別在日常開發中比較少見,但它們確實屬於原始型別,認識一下即可。
symbol:保證唯一的識別值
symbol 是一種特殊型別,每次建立出來的值都是獨一無二的。
就算兩個 symbol 用了一樣的描述文字,它們還是不同的值。
let id = Symbol("userID");symbol 常見的用途是在物件(Object)裡面建立不會跟其他 key 重複的屬性名稱。
對初學者來說,知道「它保證唯一」這件事就夠了,實務上比較進階才會用到。
bigint:處理超大數字
一般的 number 能處理的數字有上限,超過這個範圍就會出現精確度問題。
bigint 就是為了解決這個問題而存在的,它可以處理非常大的整數。
寫法是在數字後面加上一個 n。
let bigNumber: bigint = 3456789n;在金融計算或科學運算等需要超高精確度的場景,bigint 就派得上用場。
TypeScript 原始型別重點整理
這七種型別之所以叫做「原始型別」,是因為它們都是最基本、最單純的單一值。
它們是幾乎所有 TypeScript 程式的基礎。
快速複習:
number:所有數字(整數、小數、正負數)string:文字內容boolean:true或falsenull:故意設為空值undefined:宣告了但還沒給值symbol:保證唯一的特殊值bigint:超大整數
掌握這些原始型別,就等於打好了 TypeScript 的地基,後續學習物件型別、介面(Interface)、泛型(Generics)都會更順利。