TypeScript 是 JavaScript 的語法超集:合法 JS 幾乎都能放進 .ts 檔,同時多了型別系統與編譯期檢查,讓錯誤在寫程式時就被抓出,而不是等到使用者按下按鈕才尖叫。瀏覽器與 Node.js 最終仍執行 JavaScript,所以 .ts 通常要先經 TypeScript 編譯器(tsc 轉成 JS 再執行——型別資訊留在開發階段,不會原封不動出現在輸出檔裡。

這篇帶你在 macOS 完成 TypeScript 入門全流程:安裝 Node.js、tsc 安裝、tsconfig.json 設定、編譯第一支程式,並比較 Node.js、ts-node、Playground、Deno 與 Bun 幾種常見執行方式。

快速參考

項目說明
TypeScript 是什麼JS 超集 + 靜態型別檢查,輸出仍是 JavaScript
tsc 安裝npm install --save-dev typescript,執行用 npx tsc
tsconfig 初始化npx tsc --init 產生 tsconfig.json
編譯專案npx tsc → 輸出到 dist/;只檢查型別:npx tsc --noEmit
不想裝環境TypeScript Playground 線上試寫
Node.js 安裝Homebrew 教學brew install node,或 官方下載
替代執行環境ts-node(開發腳本)、Deno/Bun(內建 TS 支援)

TypeScript 是什麼?

一句話:TypeScript = JavaScript + 型別。它不是把 JS 重新發明一遍,而是在你熟悉的語法上加上型別註記、interface、泛型等工具,並由 tsc 在編譯時檢查型別是否一致。

實務上,多數團隊會把 .ts 編譯成目標環境能跑的 JS(例如 ES2022),再交給 Node.js 或打包工具處理。好處是重構時編譯器會提醒你哪裡漏改,IDE 也能提供更準確的自動完成——比靠 console.log 考古快多了。

建立 TypeScript 開發環境

先裝 Node.js,再在專案內安裝 TypeScript。把 tsc 裝在專案裡(而非全域),版本比較好固定,也比較不會遇到「在我電腦明明可以」的經典劇情。

安裝 Node.js

Node.js 官方網站 下載,或用 Homebrew

brew install node

確認可用:

node --version
npm --version

安裝 TypeScript(tsc)

建立專案並初始化:

mkdir typescript-demo
cd typescript-demo
npm init -y

把 TypeScript 裝成開發依賴——這就是 tsc 安裝的標準做法:

npm install --save-dev typescript

pnpm 使用者:

pnpm add --save-dev typescript

專案內的 tsc 不會自動變成全域命令,請透過 npx(或 pnpm exec)執行:

npx tsc --version

初始化 tsconfig.json

tsconfig.json 告訴編譯器要處理哪些檔案、輸出什麼格式的 JS。執行:

npx tsc --init

入門可先採用這份精簡設定:

{
	"compilerOptions": {
		"target": "ES2022",
		"module": "NodeNext",
		"moduleResolution": "NodeNext",
		"strict": true,
		"outDir": "dist"
	},
	"include": ["src/**/*.ts"]
}

重點三項:

  • target:輸出的 JavaScript 語法版本
  • module / moduleResolution:依 Node.js 現代模組規則解析
  • strict: true:開啟嚴格型別檢查,編譯期能抓出更多問題

實際專案會依 Node 版本與建置工具調整;上面這份適合作為現代 Node.js 的入門起點。

寫出並編譯第一支 TypeScript 程式

建立 src/hello.ts

const message: string = 'Hello, TypeScript!';

console.log(message);

編譯:

npx tsc

輸出會依照 tsconfig.json 放到 dist/。執行產生的 JS:

node dist/hello.js

若把字串傳給需要數字的函式,tsc 會在編譯時報錯——這就是型別檢查的價值,比執行時才發現少掉幾根頭髮。

tsc 常用指令

指令用途
npx tsctsconfig.json 編譯整個專案
npx tsc --noEmit只檢查型別、不產生輸出(適合 CI)
npx tsc src/hello.ts編譯單一檔案(可能不完全套用專案設定)

正式專案建議讓 tsconfig.json 管理編譯範圍,執行不帶檔名的 npx tsc,行為最一致。

執行 TypeScript 的幾種方式

完成編譯後,最單純的路線是 Node.js 跑輸出的 JS。也有適合不同情境的工具——重點不是哪個最潮,而是哪個適合你的專案。

使用 Node.js

Node.js 執行的是 JavaScript。入門建議先 tsc 編譯再執行:

npx tsc
node dist/hello.js

使用 ts-node

ts-node 讓你在開發時直接執行 .ts 檔,適合快速測試與腳本;正式部署仍依專案建置流程:

npm install --save-dev ts-node typescript
npx ts-node src/hello.ts

TypeScript Playground

不想裝任何東西?TypeScript Playground 是線上沙盒,可貼程式碼、看型別錯誤與編譯結果。先在 Playground 把概念煮熟,再搬回專案,通常比直接在正式環境亂加鹽安全。

Deno

Deno 內建 TypeScript 支援,不需先跑 tsc

// hello.ts
console.log('Hello from Deno!');
deno run hello.ts

Deno 是獨立執行環境,請依官方文件安裝,不要用 npm install -g 取代。

Bun

Bun 同樣能直接執行 .ts

// hello.ts
console.log('Hello from Bun!');
bun run hello.ts

Bun 也是獨立執行環境,不是用 pnpm add bun -g 取得的 npm 套件。

常見 FAQ

TypeScript 跟 JavaScript 有什麼差別?

TypeScript 在 JavaScript 語法上加入型別系統;合法 JS 通常也是合法 TS。差別在開發階段多了型別檢查,執行時仍是 JavaScript。

需要全域安裝 tsc 嗎?

不需要。在專案內 npm install --save-dev typescript,用 npx tsc 即可。全域安裝容易造成版本不一致,團隊協作時尤其麻煩。

tsconfig.jsonstrict 要開嗎?

入門建議開 strict: true。一開始型別錯誤多一點,但長期能避免更多隱性 bug。若遷移舊 JS 專案,可暫時關閉部分選項,再逐步收緊。

用 Homebrew 可以裝 TypeScript 嗎?

Homebrew 適合裝 Node.jsbrew install node),TypeScript 則建議用 npm/pnpm 裝在專案裡。這樣每個專案能鎖定自己的 typescript 版本,CI 與本機行為也一致。

Deno 或 Bun 還需要 tsc 嗎?

Deno 與 Bun 能直接執行 .ts,開發腳本時很方便。但若你要產出給 Node.js 或瀏覽器用的 JS、或需要嚴格控制輸出格式,仍建議用 tsc(或 esbuild、swc 等建置工具)編譯。

接下來可以學什麼?

你已完成 TypeScript 入門的基本流程:

  1. 安裝 Node.js 與專案內的 TypeScript
  2. tsconfig.json 設定編譯行為
  3. tsc 檢查並輸出 JavaScript
  4. 視情境選擇 Node.js、ts-node、Deno 或 Bun

下一步可學基本型別、函式型別、interface、泛型,以及在既有 JS 專案中逐步加入 TypeScript。先從能讓程式更好理解的型別開始,不必一口氣把整本手冊吞下去——那樣連編譯器都會替你噎到。

參考資料