實用工具
輸入
結果
結果會顯示在這裡。手寫 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