Node.js + TypeScript
後端專案跟前端最大的差異:沒有 Vite/webpack 幫你處理編譯,需要自己決定「怎麼把 .ts 變成能被 node 執行的東西」。
初始化專案
mkdir my-api && cd my-api
npm init -y
npm install --save-dev typescript tsx @types/node
npx tsc --init
tsx:開發時直接執行.ts檔,不用手動跑tsc(見 安裝與編譯)。@types/node:Node.js 內建模組(fs、path、http……)的型別宣告檔,裝上之後import fs from "node:fs"才有型別提示,本身不含任何執行邏輯。
tsconfig.json 建議至少設定 target、module、outDir、rootDir、strict,範例見 tsconfig 常用設定。
常見專案結構
my-api/
├── src/
│ ├── index.ts
│ └── routes/
├── dist/ ← tsc 編譯輸出(.gitignore 排除)
├── tsconfig.json
└── package.json
package.json 常見的兩個指令:
package.json
{
"scripts": {
"dev": "tsx watch src/index.ts",
"build": "tsc",
"start": "node dist/index.js"
}
}
開發用 npm run dev(改檔案自動重跑);上線前用 npm run build 編譯成 JS,正式環境只需要 node dist/index.js,伺服器上不用裝 TypeScript。
搭配 Express 的型別
import express, { Request, Response } from "express"
const app = express()
app.use(express.json())
interface CreateUserBody {
name: string
email: string
}
app.post("/users", (req: Request<{}, {}, CreateUserBody>, res: Response) => {
const { name, email } = req.body // name、email 都有正確型別,不是 any
res.status(201).json({ name, email })
})
app.listen(3000)
express 官方套件已內建型別,Request<{}, {}, CreateUserBody> 的第三個泛型參數指定 req.body 的形狀,搭配 Interface 與 Type 描述請求資料,是最常見的用法。
相關資源
Node.js+TypeScript 的完整實作流程篇幅較長,目前沒有找到符合本站標準、單支影片就能講完的優質教學可以嵌入;影音教學 裡 Dave Gray 與 freeCodeCamp 的長篇課程都有涵蓋 Node.js 環境設定的段落,可從影片說明的章節時間軸找到對應片段。