JSON ke TypeScript
Tempel sebuah sampel JSON, dan alat ini akan menyimpulkan antarmuka TypeScript yang sesuai dengan strukturnya. Tipe bidang ditentukan berdasarkan nilai yang teramati (string, number, boolean, Array<T>); objek bersarang memperoleh antarmuka bernama sendiri; sedangkan bidang yang teramati sebagai null atau hilang menjadi opsional (?) atau dapat bernilai null (| null), tergantung gaya yang Anda pilih.
Cara mengonversi JSON ke TypeScript
-
1
Tempel JSON
Satu sampel sudah cukup, tetapi beberapa sampel meningkatkan penyimpulan kemungkinan null dan tipe union.
-
2
Pilih gaya keluaran
`interface` (bawaan), alias `type`, atau antarmuka hanya-baca dengan semua bidang ditandai sebagai `readonly`.
-
3
Pilih strategi opsional
Tandai bidang sebagai `?` (bisa tidak ada) atau `| null` (selalu ada, tetapi bisa bernilai null).
-
4
Salin tipenya
Tempel ke dalam berkas `.ts`, dan Anda memperoleh akses bertipe kuat ke respons API.
Contoh
Masukan:
{ "id": 1, "name": "Alice", "age": null, "tags": ["admin", "user"], "address": { "city": "Madrid" } }
Keluaran:
interface User {
id: number;
name: string;
age: number | null;
tags: string[];
address: Address;
}
interface Address {
city: string;
}
Pemetaan tipe
| JSON | TypeScript |
|---|---|
| string | string |
| bilangan bulat / desimal | number |
| boolean | boolean |
| hanya null | null |
| null + T | T | null (atau T?) |
| array dari T | T[] |
| array campuran | (T1 | T2)[] |
| objek | Antarmuka bersarang bernama |
| array kosong | unknown[] (tidak dapat disimpulkan) |
Bidang opsional vs bidang yang dapat bernilai null
foo?: string, bidang ini bisa tidak ada pada objek. Pemeriksaanundefinedberlaku.foo: string | null, bidang ini selalu ada, tetapi bisa secara eksplisit bernilai null.foo?: string | null, bisa tidak ada ATAU bernilai null.
JSON sendiri tidak memiliki undefined, tetapi setiap API menandakan ketiadaan bidang dengan cara berbeda. Sesuaikan dengan semantik API yang Anda gunakan.
- API REST biasanya menghilangkan bidang yang hilang ->
?:. - GraphQL selalu mengembalikan setiap bidang yang diminta ->
| null. - Beberapa SDK menggunakan keduanya dalam konteks yang berbeda.
Tipe union vs tipe literal
Jika alat melihat bidang string yang sama hanya mengambil sekumpulan kecil nilai di seluruh sampel ("status": "pending", "active", "archived"), alat dapat menghasilkan union literal string:
status: "pending" | "active" | "archived";
Aktifkan “simpulkan union literal string” jika Anda menginginkannya.
Kesalahan umum
- Menyimpulkan dari satu sampel. Setiap bidang menjadi wajib; kemungkinan null tidak dapat diamati. Untuk tipe yang lebih baik, berikan 5-10 sampel yang bervariasi.
- Array kosong.
"tags": []tidak memberikan informasi tipe, generator menghasilkanunknown[]. Berikan sampel dengan setidaknya satu elemen. - Array bertipe campuran.
[1, "two", true]menghasilkan(number | string | boolean)[]. Biasanya ini berarti JSON sebaiknya dirancang ulang alih-alih diberi tipe apa adanya. - Kunci string numerik. JSON
{"1": "a", "2": "b"}tetap berupa objek di TypeScript (Record<string, string>), bukan array. Generator menangani hal ini dengan benar.
Pertanyaan yang Sering Diajukan
Sesuaikan dengan API Anda. API REST yang membuang bidang null cocok dengan ?:. GraphQL, yang selalu mengembalikan setiap bidang yang dipilih, cocok dengan | null. Saat ragu, T | null dengan sintaks wajib lebih ketat dan menangkap lebih banyak bug saat kompilasi.
Ya, jika Anda mengaktifkannya dan menyediakan beberapa sampel. Bidang yang teramati memiliki 2-5 nilai string berbeda di seluruh sampel akan dikeluarkan sebagai union literal. Melampaui ambang itu, ia kembali ke string.
interface untuk sebagian besar kasus, terbuka untuk perluasan dan dioptimalkan lebih baik oleh TypeScript. Alias type berguna untuk union, intersection, tuple, dan tipe mapped. Untuk tipe turunan dari JSON keduanya bisa dipakai; pilih konvensi proyek.
Ya. Setiap objek bersarang menjadi antarmuka tersendiri, dengan nama yang diturunkan dari kunci (user.address -> Address). Untuk struktur yang sangat dalam atau berulang, pertimbangkan JSON Schema dan generator schema-to-TS khusus.
Alat Terkait
Referensi Tabel ASCII
Tabel ASCII lengkap dari 0 sampai 127 dengan desimal, heksadesimal, oktal, biner, dan referensi karakter numerik HTML untuk setiap karakter, termasuk kode kontrol seperti NUL, LF, dan DEL.
Referensi Karakter HTML
Daftar entitas HTML yang dapat dicari, beserta kode bernama dan kode numeriknya, serta fitur salin dengan satu klik untuk karakter khusus dan simbol.
Referensi pintasan papan ketik
Cari pintasan bawaan terdokumentasi untuk VS Code, Chrome, dan Bash dengan GNU Readline di macOS, Windows, dan Linux.
Pemformat HTML
Format HTML secara lokal di browser dengan inden dua atau empat spasi. HTML tidak diunggah atau divalidasi.
Generator EditorConfig
Buat file .editorconfig dengan gaya dan ukuran indentasi, akhir baris, charset, dan aturan spasi Anda untuk format yang konsisten di berbagai IDE dan editor.
Validator Email
Validasi alamat email: pemeriksaan sintaks RFC 5322, pengecekan live record MX, serta detail bagian lokal, domain, dan panjang. Tidak ada email yang dikirim.
Alat ini tersedia dalam bahasa lain
- JSONからTypeScriptへ [JA]
- JSON เป็น TypeScript [TH]
- JSON sang TypeScript [VI]
- JSON zu TypeScript [DE]
- JSON에서 TypeScript로 [KO]
- JSON do TypeScript [PL]
- JSON para TypeScript [PT]
- JSON a TypeScript [ES]
- JSON till TypeScript [SV]
- تحويل JSON إلى TypeScript [AR]
- JSON vers TypeScript [FR]
- JSON naar TypeScript [NL]
- JSON в TypeScript [RU]
- JSON'dan TypeScript'e [TR]
- JSON 转 TypeScript [ZH]
- JSON to TypeScript [EN]
- JSON a TypeScript [IT]