DevToolPal
繁

JSON 轉 TypeScript

根據 JSON 範例產生 TypeScript 介面或型別,自動拆分巢狀型別、辨識可選欄位和 null。

本機處理,不會上傳

選項

宣告方式
null 值

JSON

0 字元 · 0 B

TypeScript

0 字元 · 0 B

功能介紹

JSON 轉 TypeScript 工具讀取一段 JSON 範例(例如 API 回應或設定檔),產生描述它的 TypeScript 介面。不必再手寫每個欄位,貼上一份真實回應,就能得到可以直接放進程式碼的型別,用於 fetch 結果、Redux 狀態或測試資料。

產生器會檢查每一個值,而不只是第一個。數字變成 number,文字變成 string,巢狀物件產生獨立介面,陣列元素會合併:只在部分元素中出現的欄位標為可選,有時為 null 的欄位標為可為空。

使用方法

  1. 把 JSON 貼到輸入框、上傳 .json 檔案,或按「範例」。
  2. 設定根型別名稱並選擇風格:interface 或 type、null 寫成 | null 還是可選欄位、是否加 readonly、是否為每個宣告加 export。
  3. 複製 TypeScript,或下載為 .ts 檔案。

JSON 格式錯誤時會提示出錯的行與欄,方便立即修正範例。

範例

這段 JSON:

{ "id": 7, "name": "Ada", "tags": ["admin"], "manager": { "id": 1, "email": null } }

會產生以下宣告:

export interface Root {
  id: number;
  name: string;
  tags: string[];
  manager: Manager;
}

export interface Manager {
  id: number;
  email: null;
}

小提示

  • 一份範例只能呈現它包含的內容。如果某個欄位可能是字串也可能是 null,請兩種情況各給一個例子,或把多份範例放進一個陣列讓它們合併。
  • 不是合法識別字的欄位名(例如 first-name)會加上引號,確保輸出一定能編譯。
  • 結果只是起點。如果你比範例了解得更多,可以把字串欄位收窄為字面值聯集型別或 Date。
  • 需要 Go 程式碼?JSON 轉 Go 工具使用相同的推斷邏輯產生帶 json 標籤的結構體。

常見問題

› 巢狀物件怎麼處理?

每個巢狀物件都會產生一個獨立的具名介面,名稱取自欄位名的 PascalCase 形式,例如 address 欄位對應 Address 介面。結構完全相同的物件共用一個介面,名稱衝突時加上數字,例如 Address2。

› 陣列的型別怎麼決定?

陣列中的所有元素會合併成一個元素型別。物件陣列會變成以欄位名單數形式命名的介面陣列,例如 orders 對應 Order[]。混合陣列產生聯集型別,例如 (string | number)[];空陣列產生 unknown[]。

› 什麼時候欄位會被標為可選?

當它在陣列中的部分物件裡缺少時。每個物件都有但有時為 null 的欄位,預設寫成 T | null;把 null 值選項切換為可選,就會移除 null,改在欄位名後加問號表示可選。

› 應該選 interface 還是 type?

兩者都能描述相同的物件結構。interface 可以繼承與合併,許多程式碼規範建議用它描述物件型別;type 別名較適合之後與聯集型別、映射型別組合使用。依專案既有習慣選擇即可。

› 我的 JSON 會被傳送到伺服器嗎?

不會。型別推斷在瀏覽器中完成,可以放心貼上真實的 API 回應資料。