---
paths:
  - "**/*.ts"
  - "**/*.tsx"
  - "**/*.js"
  - "**/*.jsx"
---
# TypeScript/JavaScript 程式碼風格 (Coding Style)

> 本檔案擴展了 [common/coding-style.md](../common/coding-style.md)，包含 TypeScript/JavaScript 特定內容。

## 不可變性 (Immutability)

使用展開運算子 (Spread operator) 進行不可變更新：

```typescript
// 錯誤：直接修改 (Mutation)
function updateUser(user, name) {
  user.name = name  // 修改了原始物件！
  return user
}

// 正確：不可變性 (Immutability)
function updateUser(user, name) {
  return {
    ...user,
    name
  }
}
```

## 錯誤處理 (Error Handling)

使用 async/await 搭配 try-catch：

```typescript
try {
  const result = await riskyOperation()
  return result
} catch (error) {
  console.error('操作失敗：', error)
  throw new Error('詳細且對使用者友好的訊息')
}
```

## 輸入驗證 (Input Validation)

使用 Zod 進行基於 Schema 的驗證：

```typescript
import { z } from 'zod'

const schema = z.object({
  email: z.string().email(),
  age: z.number().int().min(0).max(150)
})

const validated = schema.parse(input)
```

## Console.log

- 生產環境程式碼中不得包含 `console.log` 語句。
- 應改用適當的日誌庫 (Logging libraries)。
- 參見鉤子 (Hooks) 以獲取自動偵測功能。
