昨天我們把 TypeScript 開發環境弄好了,
今天開始正式踏進型別的世界~
你可以把型別想像成變數的「性格設定」,
它會影響變數能做什麼、不能做什麼。
如果沒有型別,就像交朋友不先打聽個性,
可能聊到一半才發現對方完全聽不懂你在說什麼。
let age = 18;
age = "十八"; // JS:OK,我不攔你
console.log(age + 1); // 結果?"十八1"
let age: number = 18;
age = "十八";
// ❌ Type 'string' is not assignable to type 'number'
TS 幫你把 bug 擋在門口,讓程式更穩定。
TypeScript 常見基礎型別:
型別 | 說明 | 範例 |
---|---|---|
string |
字串 | "Marco" , 'Hello' , Hi |
number |
數字(整數 + 小數) | 18 , 3.14 |
boolean |
布林值 | true , false |
null |
空值 | null |
undefined |
尚未賦值 | undefined |
any |
任意型別(危險,慎用) | let x: any = 123; |
unknown |
不確定型別(比 any 安全) | let y: unknown = "hi"; |
void |
函式沒有回傳值 | function log(): void {} |
never |
函式永遠不會結束(例外拋出) | function error(): never { throw new Error(); } |
string
、number
、boolean
let userName: string = "Marco";
let age: number = 25;
let isAdmin: boolean = true;
any
vs unknown
let data: any = "123";
data = 456; // OK,什麼都能放
data.toUpperCase(); // ✅ 但可能會 runtime 爆炸
let safeData: unknown = "456";
// unknown 不能直接用,要檢查型別
if (typeof safeData === "string") {
console.log(safeData.toUpperCase()); // OK
}
TIP:專案中 能用 unknown 就不要用 any。
void
與 never
function logMessage(message: string): void {
console.log(message); // 沒有回傳值
}
function throwError(msg: string): never {
throw new Error(msg); // 永遠不會 return
}
TypeScript 很聰明,會根據初始值推論型別:
let count = 10; // TS 推論成 number
count = "十"; // ❌ 報錯
但注意:公開 API、函式參數、回傳值 建議還是明確寫型別。
function add(a: number, b: number): number {
return a + b;
}
null
vs undefined
null
:刻意給一個「空值」undefined
:代表「還沒被賦值」let a: null = null;
let b: undefined = undefined;
在 TS 裡通常會用 undefined
來代表「沒有值」。
變數不一定要是大範圍的 string | number
,
也可以直接指定成「特定值」:
let direction: "up" | "down" | "left" | "right";
direction = "up"; // OK
direction = "hello"; // ❌
這個技巧很常用在「狀態管理」或「固定參數選項」。
const
與型別推論let name = "Marco"; // 推論成 string
const role = "admin"; // 推論成字面量 "admin"
const
會讓變數型別更精準 → 避免被誤改。
Cannot read property 'x' of undefined
。strictNullChecks: true
+ Optional chaining (?.
) 解決。👉 嘗試自己寫:
userName
(string)、userAge
(number)、isVip
(boolean)。sayHello(name: string): string
函式,回傳 Hello, name!
。"up" | "down"
的變數。