跳到主要內容
Tools

JSON 轉 TypeScript

從範例 JSON 產生 TypeScript interface 或 type,自動合併陣列元素、標示可選屬性與聯集型別。

宣告方式

0 個字元 · 1 行

型別是從範例推測的:陣列中某些元素缺少的屬性會標成可選(?),範例沒有出現的情況不會包含在內。

使用說明

  1. 在左側貼上 JSON 範例,例如 API 的回應內容;也可以按「範例」看看效果。
  2. 設定根型別名稱,選擇要用 interface 或 type 宣告,以及是否加上 export 與 readonly。
  3. 右側(手機上在下方)會即時顯示 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,請在產生後自行調整。

鍵盤快捷鍵

/
搜尋工具(在工具頁會回到首頁的搜尋欄)
?
顯示這個說明
Esc
關閉對話框
Ctrl / ⌘Enter
執行工具的主要動作(支援的工具)

在輸入框中打字時,/ 與 ? 不會觸發快捷鍵。