Skip to content

[Tech Debt] 表單狀態管理型別安全 #227

@andrewck24

Description

@andrewck24

描述

使用 z.infer 從 Zod schema 生成表單的型別,並應用於 useForm hook,確保表單資料的型別安全。

範例實作

const formSchema = z.object({
  name: z.string().min(1),
  nickname: z.string().optional(),
});

type TeamFormValues = z.infer<typeof formSchema>;

const form = useForm<TeamFormValues>({
  resolver: zodResolver(formSchema),
  defaultValues: { name: "", nickname: "" },
});

任務清單

  • 識別所有使用 useForm 的元件
  • 為每個表單建立對應的 Zod schema
  • 使用 z.infer<typeof schema> 生成型別
  • 更新 useForm hook 的型別參數
  • 確認 onSubmit 回調函式的型別安全
  • 測試表單驗證功能

可能問題與解決方案

  • 問題: 現有 schema 與實際表單資料不匹配
  • 解決: 逐步對照並調整 schema,確保一致性
  • 問題: defaultValues 型別不匹配
  • 解決: 使用 Partial<T> 或提供完整的預設值

風險與緩解

  • 風險等級:中
  • 緩解:逐步對照與調整 schema;defaultValues 採用 Partial<T> 或補齊值;維持向下相容;為主要表單建立 smoke/E2E 測試腳本

測試與驗收

  • 受影響表單的驗證與提交流程無錯誤
  • 關鍵數字欄位與邊界條件(空字串、null、非數字)皆正確處理

優先級: High
Story Points: 5
預估工時: 2-3 天

Metadata

Metadata

Assignees

Labels

No labels
No labels

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions