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
Generator Konfigurasi Webpack
Buat webpack.config.js untuk webpack 5 bagi JavaScript biasa, React, atau Vue: TypeScript, Babel, CSS atau Sass, gambar, HtmlWebpackPlugin, server pengembangan, dan baris npm install.
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.
Validator OpenAPI
Tempel dokumen OpenAPI atau Swagger dalam JSON atau YAML dan periksa struktur intinya: bidang versi, objek info, dan paths, dengan galat dan peringatan yang jelas.
Pemformat PHP
Tambahkan baris baru dan indentasi 2 atau 4 spasi ke cuplikan PHP sederhana. Periksa hasilnya: alat ini bukan parser PHP dan tidak menerapkan PSR-12.
Generator Loader CSS
Buat spinner lingkaran CSS murni: atur diameter, ketebalan border, warna dan kecepatan rotasi, lihat pratinjau langsung, lalu salin CSS siap pakai. Tanpa SVG, tanpa JavaScript.
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.
Alat ini tersedia dalam bahasa lain
- JSON till TypeScript [SV]
- JSON para TypeScript [PT]
- JSON a TypeScript [ES]
- JSON เป็น TypeScript [TH]
- JSON vers TypeScript [FR]
- JSON zu TypeScript [DE]
- JSON에서 TypeScript로 [KO]
- JSONからTypeScriptへ [JA]
- JSON naar TypeScript [NL]
- تحويل JSON إلى TypeScript [AR]
- JSON sang TypeScript [VI]
- JSON do TypeScript [PL]
- JSON to TypeScript [EN]
- JSON a TypeScript [IT]
- JSON в TypeScript [RU]
- JSON'dan TypeScript'e [TR]
- JSON 转 TypeScript [ZH]