JSON 轉 TypeScript
從範例 JSON 產生 TypeScript interface 或 type,自動合併陣列元素、標示可選屬性與聯集型別。
0 個字元 · 1 行
型別是從範例推測的:陣列中某些元素缺少的屬性會標成可選(?),範例沒有出現的情況不會包含在內。
使用說明
- 在左側貼上 JSON 範例,例如 API 的回應內容;也可以按「範例」看看效果。
- 設定根型別名稱,選擇要用 interface 或 type 宣告,以及是否加上 export 與 readonly。
- 右側(手機上在下方)會即時顯示 TypeScript 型別,按「複製」或「下載」取得 .ts 檔案。
常見問題
我的資料會被上傳嗎?
不會。型別在你的瀏覽器中產生,JSON 不會離開你的裝置,貼上含有個人資料的 API 回應也沒關係。
陣列裡的物件屬性不一樣時怎麼處理?
陣列中所有元素會合併成同一個型別:只出現在部分元素的屬性標成可選(name?: string),同一個屬性在不同元素中型別不同時寫成聯集(number | string)。
null 會變成什麼型別?
預設與其他型別組成聯集,例如 string | null;範例中只有 null 時就是 null。勾選「null 改為可選屬性」後,會改成 name?: string,適合把 null 視為「沒有值」的 API。
巢狀物件的型別名稱怎麼決定?
以屬性名稱轉成 PascalCase,例如 user_profile 變成 UserProfile;陣列元素使用單數,例如 users 的元素叫 User,無法判斷單數時加上 Item。結構完全相同的物件會共用同一個型別;名稱相同但結構不同時,會加上數字(Item2)。
為什麼有些屬性名稱加了引號?
不是合法 JavaScript 識別字的名稱(例如含有 - 或空格、以數字開頭)必須加上引號,例如 "first-name": string。中文屬性名稱是合法的識別字,不需要引號。
大數字或日期會怎麼處理?
JSON 只有數字與字串,所以超過安全整數範圍的數字仍是 number,日期字串仍是 string。如果需要 bigint 或 Date,請在產生後自行調整。