實用工具

JSON 轉 TypeScript 介面

貼上 API 回傳的 JSON,產生對應的 TypeScript interface 或 type 別名,選用欄位會從資料中自動推斷。

瀏覽器本機執行程式碼轉換1.4萬
免費

輸入

0 B

結果

結果會顯示在這裡。

手寫 API 回應的型別既慢又容易出錯:某個欄位有時不存在,某個值有時是 null,陣列裡的物件鍵並不完全相同。這個工具把你的 JSON 交給 quicktype——Glide 開源的型別產生器,也是編輯器擴充功能 Paste JSON as Code 背後的引擎——回傳可以直接貼進專案的 interface。當 JSON 是陣列時,會逐一比較每個元素:只出現在部分元素中的鍵會標為選用,有時為 null 的值則會產生與 null 的聯集型別。

它是怎麼運作的

  • quicktype-core 在網頁中執行;這個函式庫約 1 MB,只有在你第一次按下這個工具的「執行」時才會下載。
  • 巢狀物件會各自成為具名的 interface,在不同位置出現的相同結構會合併成同一個型別。
  • 看起來像日期的字串仍然標為 string,因為 JSON.parse 實際回傳給你的就是字串。
  • 可以選擇以 interface 或 type 別名宣告、將所有欄位標為 readonly,並設定頂層型別的名稱。

你的資料去了哪裡

哪也沒去。本工具完全在你的瀏覽器裡執行:你貼上的文字由頁面處理,不會傳輸到任何伺服器,也不會寫進任何紀錄。

本工具免費且免登入,執行結果只存在於你目前的頁面裡,不會被儲存到任何地方。

它要花多少

本工具完全免費,不需要登入,也不消耗點數。

常見問題

它怎麼判斷一個欄位是選用的?
只依據你提供的資料。如果 JSON 是物件陣列,而某個鍵在至少一個元素中缺少,這個鍵就會加上問號。單一物件無法提供任何一方的證據,所以其中每個鍵都是必填。想讓選用欄位判斷正確,就把幾份真實回應放進同一個陣列再貼上。
為什麼某個欄位的型別是 null,而不是 string | null?
因為每個樣本值都是 null,quicktype 沒有其他依據——它無從得知這個欄位有值時會是什麼。GitHub 範例資料中的 mirror_url 就是這種情況。補一個該欄位有值的範例,或者手動放寬型別。
interface 還是 type 別名,該選哪個?
對一般的物件結構來說,兩者實際上可以互換。interface 可以被擴充,也能透過重複宣告合併,有些函式庫依賴這一點;type 別名還能表達聯集型別和映射型別。多數程式碼庫會統一使用其中一種,這個選項就是讓你配合自己的專案。
這會在執行階段驗證回應嗎?
不會。TypeScript 型別在程式碼編譯後就消失了,所以結構不符的回應照樣會通過。如果需要在執行階段檢查,請用本站的 JSON 轉 Zod 工具從同一份 JSON 產生 Zod schema,再用它來 parse 回應。

背後的開源專案

本工具執行在 glideapps/quicktype 之上,以 Apache-2.0 授權發布。如果你需要在自己的程式裡實作同樣的能力,直接用這個函式庫。

glideapps/quicktype

也常被稱作

  • json 轉 typescript
  • json 轉 ts interface
  • json 產生 typescript 型別
  • json to typescript
  • quicktype 線上
  • api 回應轉 typescript