TypeScript 如何使用

學會了如何安裝 TypeScript 之後,讓我們來了解 TypeScript 的基本使用方式和編譯流程。

TypeScript 檔案

TypeScript 程式碼寫在副檔名為 .ts 的檔案中。如果是包含 JSX 語法的 React 元件,則使用 .tsx 副檔名。

hello.ts      ← 一般的 TypeScript 檔案
App.tsx       ← 包含 JSX 的 TypeScript 檔案

編譯 TypeScript

TypeScript 程式碼不能直接被瀏覽器或 Node.js 執行,需要先編譯成 JavaScript。

編譯單一檔案

tsc hello.ts

這會在同目錄下產生 hello.js 檔案。

編譯整個專案

如果專案中有 tsconfig.json 設定檔,直接執行 tsc 即可編譯整個專案:

tsc

監看模式 (Watch Mode)

在開發過程中,可以使用監看模式,當檔案變更時自動重新編譯:

tsc --watch
# 或簡寫
tsc -w

第一個 TypeScript 程式

讓我們寫一個簡單的程式來體驗 TypeScript:

// greeting.ts

// 定義一個函式,參數 name 必須是 string 型別
function greet(name: string): string {
  return `哈囉,${name}!`;
}

// 正確的呼叫方式
console.log(greet('世界'));

// 如果傳入錯誤的型別,TypeScript 會報錯
// greet(123);  // 錯誤:型別 'number' 的引數不可指派給型別 'string' 的參數

編譯後產生的 JavaScript:

// greeting.js
function greet(name) {
  return `哈囉,${name}!`;
}
console.log(greet('世界'));

注意:編譯後的 JavaScript 沒有型別標註,因為 JavaScript 本身不支援型別語法。

TypeScript 與 JavaScript 的差異

型別標註

TypeScript 最明顯的特徵就是型別標註:

// 變數型別標註
let message: string = 'Hello';
let count: number = 42;
let isActive: boolean = true;

// 函式參數和回傳值型別標註
function add(a: number, b: number): number {
  return a + b;
}

介面 (Interface)

TypeScript 可以定義物件的結構:

interface User {
  name: string;
  age: number;
  email?: string; // 可選屬性
}

function printUser(user: User) {
  console.log(`${user.name}, ${user.age} 歲`);
}

printUser({ name: '小明', age: 25 });

型別推論

TypeScript 可以自動推論型別,不需要每個地方都寫型別標註:

// TypeScript 自動推論 message 是 string 型別
let message = 'Hello';

// TypeScript 自動推論回傳值是 number 型別
function add(a: number, b: number) {
  return a + b;
}

執行 TypeScript

傳統方式:編譯後執行

# 1. 編譯
tsc hello.ts

# 2. 執行
node hello.js

使用 ts-node 直接執行

ts-node 可以直接執行 TypeScript 檔案,不需要手動編譯:

# 安裝 ts-node
npm install -g ts-node

# 直接執行 TypeScript 檔案
ts-node hello.ts

使用 tsx 直接執行 (推薦)

tsx 是更快速的 TypeScript 執行工具:

# 安裝 tsx
npm install -g tsx

# 直接執行 TypeScript 檔案
tsx hello.ts

# 監看模式
tsx watch hello.ts

在網頁中使用 TypeScript

在前端專案中,通常會搭配打包工具 (bundler) 來處理 TypeScript:

Vite (推薦)

# 建立 Vite + TypeScript 專案
npm create vite@latest my-app -- --template vanilla-ts
cd my-app
npm install
npm run dev

Webpack

需要安裝 ts-loaderbabel-loader 來處理 TypeScript 檔案。

線上練習 TypeScript

如果你想快速測試 TypeScript 程式碼,可以使用:

  1. TypeScript Playground:官方提供的線上編輯器,可以即時看到編譯結果和型別檢查
  2. StackBlitz:線上 IDE,支援完整的 TypeScript 專案
  3. CodeSandbox:線上開發環境,支援多種框架的 TypeScript 範本

常見編譯錯誤

剛開始學習 TypeScript 時,可能會遇到一些編譯錯誤:

型別不符

let name: string = 123;
// 錯誤:Type 'number' is not assignable to type 'string'

屬性不存在

let user = { name: '小明' };
console.log(user.age);
// 錯誤:Property 'age' does not exist on type '{ name: string; }'

參數數量錯誤

function greet(name: string) {
  console.log(`Hello, ${name}`);
}
greet();
// 錯誤:Expected 1 arguments, but got 0

這些錯誤訊息雖然一開始看起來有點嚇人,但它們是 TypeScript 在幫助你避免潛在的 bug!