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 typescriptpnpm 使用者:
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 tsc | 依 tsconfig.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.tsTypeScript Playground
不想裝任何東西?TypeScript Playground 是線上沙盒,可貼程式碼、看型別錯誤與編譯結果。先在 Playground 把概念煮熟,再搬回專案,通常比直接在正式環境亂加鹽安全。
Deno

Deno 內建 TypeScript 支援,不需先跑 tsc:
// hello.ts
console.log('Hello from Deno!');deno run hello.tsDeno 是獨立執行環境,請依官方文件安裝,不要用 npm install -g 取代。
Bun

Bun 同樣能直接執行 .ts:
// hello.ts
console.log('Hello from Bun!');bun run hello.tsBun 也是獨立執行環境,不是用 pnpm add bun -g 取得的 npm 套件。
常見 FAQ
TypeScript 跟 JavaScript 有什麼差別?
TypeScript 在 JavaScript 語法上加入型別系統;合法 JS 通常也是合法 TS。差別在開發階段多了型別檢查,執行時仍是 JavaScript。
需要全域安裝 tsc 嗎?
不需要。在專案內 npm install --save-dev typescript,用 npx tsc 即可。全域安裝容易造成版本不一致,團隊協作時尤其麻煩。
tsconfig.json 的 strict 要開嗎?
入門建議開 strict: true。一開始型別錯誤多一點,但長期能避免更多隱性 bug。若遷移舊 JS 專案,可暫時關閉部分選項,再逐步收緊。
用 Homebrew 可以裝 TypeScript 嗎?
Homebrew 適合裝 Node.js(brew install node),TypeScript 則建議用 npm/pnpm 裝在專案裡。這樣每個專案能鎖定自己的 typescript 版本,CI 與本機行為也一致。
Deno 或 Bun 還需要 tsc 嗎?
Deno 與 Bun 能直接執行 .ts,開發腳本時很方便。但若你要產出給 Node.js 或瀏覽器用的 JS、或需要嚴格控制輸出格式,仍建議用 tsc(或 esbuild、swc 等建置工具)編譯。
接下來可以學什麼?
你已完成 TypeScript 入門的基本流程:
- 安裝 Node.js 與專案內的 TypeScript
- 用
tsconfig.json設定編譯行為 - 用
tsc檢查並輸出 JavaScript - 視情境選擇 Node.js、ts-node、Deno 或 Bun
下一步可學基本型別、函式型別、interface、泛型,以及在既有 JS 專案中逐步加入 TypeScript。先從能讓程式更好理解的型別開始,不必一口氣把整本手冊吞下去——那樣連編譯器都會替你噎到。
參考資料
- TypeScript 官方網站:語言介紹與最新文件
- TypeScript Handbook:型別系統與語言功能教學
- TypeScript
tsconfig.json參考:編譯器選項查詢 - Node.js 官方下載:Node.js 安裝方式
- Deno 安裝文件
- Bun 安裝文件
