TypeScript 基本型別 (Basic Types)
在 TypeScript 中,我們最常打交道的不是複雜的類別或介面,而是這些最基礎的型別。掌握它們,是寫好 TypeScript 的第一步。
原始型別 (Primitive Types)
這些是你會最常使用到的型別,它們直接對應到 JavaScript 的原始型別。
string (字串)
不管是單引號 '、雙引號 " 還是反引號 ` (Template Literal),都屬於 string。
let name: string = '小明';
let message: string = `Hello, ${name}`;
number (數字)
在 JavaScript/TypeScript 中,沒有分什麼 int 或 float,所有數字(包含整數、浮點數、十六進位)統統都是 number。
let age: number = 25;
let price: number = 99.99;
let hex: number = 0xff;
boolean (布林值)
只有兩個值:true 和 false。
let isDone: boolean = false;
null 與 undefined
這兩個比較特殊。在 JavaScript 中它們既是值也是型別。
在 TypeScript 中,它們的使用取決於 strictNullChecks 設定(強烈建議開啟):
- 開啟時 (Strict):
null只能指派給null型別,undefined只能指派給undefined。你不能把null塞給number變數。 - 關閉時 (Loose):它們是所有型別的子型別,也就是說你可以把
null指派給number(這很容易導致 bug)。
let u: undefined = undefined;
let n: null = null;
特殊型別 (Special Types)
這些是 TS 為了處理某些特殊場景而發明的型別。
any (隨便啦)
any 是 TypeScript 的「逃生門」。當你把一個變數標記為 any,就像是告訴 TS:「請閉嘴,不要檢查這個變數,我說了算」。
let notSure: any = 4;
notSure = 'maybe a string instead';
notSure = false; // 都可以,完全沒限制
notSure.hello(); // 編譯會過,但執行時可能會爆掉 (Runtime Error)
注意:盡量少用
any。用太多any,那你還不如直接寫 JavaScript。
unknown (不知道是啥)
unknown 是安全版的 any。它表示:「我還不知道這變數是什麼,所以在確認之前,你不能隨便用它」。
let value: unknown = 4;
// value.toFixed(); // 錯誤!TS 不准你亂用,因為它是 unknown
// 你必須先「檢查」它,縮小範圍後才能用
if (typeof value === 'number') {
console.log(value.toFixed(2)); // OK!現在 TS 知道它是 number 了
}
void (空)
通常用在函式回傳值,表示這個函式「不回傳任何東西」。
function warnUser(): void {
console.log('This is my warning message');
// 這裡沒有 return,或者 return undefined
}
never (絕不)
表示那些「永遠不存在」的值。這很抽象,常見於兩種情況:
- 函式拋出錯誤 (程式中斷了,所以永遠不會有回傳值)
- 無窮迴圈 (程式卡住了,永遠不會執行完)
// 這個函式執行不完,所以回傳型別是 never
function error(message: string): never {
throw new Error(message);
}
陣列與物件
陣列 (Array)
有兩種寫法,意思完全一樣,看你喜歡哪種。
// 寫法一 (推薦,較簡潔)
let list: number[] = [1, 2, 3];
// 寫法二 (泛型寫法)
let list2: Array<number> = [1, 2, 3];
物件 (Object)
我們很少直接用 object 這個型別(因為它太籠統了,只代表「非原始型別」)。我們通常會直接定義物件的「形狀」:
// 這樣寫,user 就必須剛好有這兩個屬性,型別也要對
let user: { name: string; age: number } = {
name: '小明',
age: 25,
};
總結
| 型別 | 意義 | 建議用法 |
|---|---|---|
string, number, boolean | 基礎三寶 | 最常用的型別 |
any | 放棄檢查 | 除非逼不得已,否則別用 |
unknown | 未知型別 | 用來處理來自 API 或外部的不確定資料 |
void | 無回傳 | 用於函式回傳值 |
never | 不可能 | 用於錯誤處理或完整性檢查 |