iT邦幫忙

2025 iThome 鐵人賽

DAY 3
0
Modern Web

我與型別的 30 天約定:TypeScript 入坑實錄系列 第 3

Day 3|變數也有性格?帶你認識 TypeScript 基本型別

  • 分享至 

  • xImage
  •  

昨天我們把 TypeScript 開發環境弄好了,
今天開始正式踏進型別的世界~

你可以把型別想像成變數的「性格設定」,
它會影響變數能做什麼、不能做什麼。

1. 為什麼需要型別?

如果沒有型別,就像交朋友不先打聽個性,

可能聊到一半才發現對方完全聽不懂你在說什麼。

JavaScript:性格自由,結果混亂

let age = 18;
age = "十八"; // JS:OK,我不攔你
console.log(age + 1); // 結果?"十八1"

TypeScript:先說好規矩

let age: number = 18;
age = "十八";
// ❌ Type 'string' is not assignable to type 'number'

TS 幫你把 bug 擋在門口,讓程式更穩定。


2. 基本型別速覽

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(); }

3. 範例時間

stringnumberboolean

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。

voidnever

function logMessage(message: string): void {
  console.log(message); // 沒有回傳值
}

function throwError(msg: string): never {
  throw new Error(msg); // 永遠不會 return
}


4. 型別推論

TypeScript 很聰明,會根據初始值推論型別:

let count = 10; // TS 推論成 number
count = "十";   // ❌ 報錯

但注意:公開 API、函式參數、回傳值 建議還是明確寫型別。

function add(a: number, b: number): number {
  return a + b;
}


5. 特殊小知識

null vs undefined

  • null:刻意給一個「空值」
  • undefined:代表「還沒被賦值」
let a: null = null;
let b: undefined = undefined;

在 TS 裡通常會用 undefined 來代表「沒有值」。


字面量型別(Literal Types)

變數不一定要是大範圍的 string | number

也可以直接指定成「特定值」:

let direction: "up" | "down" | "left" | "right";
direction = "up";    // OK
direction = "hello"; // ❌

這個技巧很常用在「狀態管理」或「固定參數選項」。


const 與型別推論

let name = "Marco";   // 推論成 string
const role = "admin"; // 推論成字面量 "admin"

const 會讓變數型別更精準 → 避免被誤改。


6. 常見陷阱

  1. any 太方便,一不小心濫用
    • 小專案還好,但大專案裡等於放棄 TS 保護。
  2. 忘了 null / undefined
    • 常見錯誤:Cannot read property 'x' of undefined
    • 可以用 strictNullChecks: true + Optional chaining (?.) 解決。
  3. 函式沒標回傳型別
    • 小心 TS 推論錯,養成標註習慣。

7. 小練習 🎯

👉 嘗試自己寫:

  1. 宣告一個 userName(string)、userAge(number)、isVip(boolean)。
  2. 寫一個 sayHello(name: string): string 函式,回傳 Hello, name!
  3. 嘗試宣告一個只能是 "up" | "down" 的變數。

上一篇
Day 2|打造 TypeScript 開發環境:tsconfig 跟我想的不一樣!
系列文
我與型別的 30 天約定:TypeScript 入坑實錄3
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言