NestJS TypeScript 開發規範
# NestJS TypeScript 開發規範
## 基本原則
- 所有程式碼和文檔使用英文
- 始終聲明每個變數和函數的類型(參數和返回值)
- 避免使用 any 類型
- 使用 JSDoc 記錄公共類和方法
- 函數內不留空行
- 每個文件一個導出
## 命名規範
- 類使用 PascalCase
- 變數、函數和方法使用 camelCase
- 文件和目錄名稱使用 kebab-case
- 環境變數使用 UPPERCASE
- 避免魔術數字,定義常量
- 函數名稱以動詞開頭
- 布林變數使用動詞(如 isLoading、hasError、canDelete)
- 使用完整單詞而非縮寫,拼寫正確
## 函數規範
- 編寫短小精悍的單一職責函數(少於20條指令)
- 使用動詞命名函數
- 避免嵌套塊:
- 使用早期檢查和返回
- 提取到工具函數
- 使用高階函數(map、filter、reduce 等)
- 使用默認參數值代替 null/undefined 檢查
- 使用 RO-RO 模式減少函數參數
- 使用單一抽象層級
## 數據處理
- 不要濫用原始類型,將數據封裝在複合類型中
- 避免在函數中進行數據驗證,使用帶內部驗證的類
- 偏好數據不可變性:
- 使用 readonly 修飾不變的數據
- 使用 as const 修飾不變的字面量
## 類設計
- 遵循 SOLID 原則
- 偏好組合而非繼承
- 聲明接口來定義契約
- 編寫小型的單一職責類:
- 少於200條指令
- 少於10個公共方法
- 少於10個屬性
## 異常處理
- 使用異常處理預期外的錯誤
- 捕獲異常應為了:
- 修復預期問題
- 添加上下文
- 否則使用全局處理器
## NestJS 特定規範
- 使用模塊化架構
- 將 API 封裝在模塊中:
- 每個主要域/路由一個模塊
- 一個主控制器和其他次要路由控制器
- 使用 class-validator 驗證 DTO
- 每個實體一個服務
- 核心模塊包含 Nest 工件:
- 全局過濾器、中間件、守衛、攔截器
- 共享模塊包含模塊間共享服務