Jenis Utiliti TypeScript: Panduan Lengkap
TL;DR: Jenis utiliti TypeScript ialah fungsi prabina yang mengubah jenis sedia ada, menjadikan kod anda lebih bersih dan lebih mudah diselenggara. Artikel ini menerangkan jenis utiliti penting dengan contoh dunia sebenar, termasuk cara mengemas kini profil pengguna, mengurus konfigurasi dan menapis data dengan selamat.
TypeScript ialah asas dalam pembangunan web moden, membolehkan pembangun menulis kod yang lebih selamat dan boleh diselenggara. Dengan memperkenalkan penaipan statik ke JavaScript, TypeScript membantu menangkap ralat pada masa penyusunan. Menurut Tinjauan Pembangun Stack Overflow 2024, TypeScript meletakkan ke-5ke dalam teknologi skrip paling popular dalam kalangan pembangun.
Ciri hebat TypeScript adalah sebab utama di sebalik kejayaannya. Contohnya, jenis utiliti membantu pemaju memudahkan manipulasi jenis dan mengurangkan kod boilerplate. Jenis utiliti telah diperkenalkan dalam TypeScript 2.1, dan jenis utiliti tambahan telah ditambahkan dalam setiap keluaran baharu.
Artikel ini akan membincangkan jenis utiliti secara terperinci untuk membantu anda menguasai TypeScript.
Memahami jenis utiliti TypeScript
Jenis utiliti adalah jenis generik yang dipratakrifkan dalam TypeScript yang membolehkan penukaran jenis sedia ada kepada jenis varian baharu. Ia boleh dianggap sebagai fungsi peringkat jenis yang mengambil jenis sedia ada sebagai parameter dan mengembalikan jenis baharu berdasarkan peraturan transformasi tertentu.
Ini amat berguna apabila bekerja dengan antara muka, di mana variasi jenis yang diubah suai yang sedia ada selalunya diperlukan tanpa perlu menduplikasi definisi jenis.
Jenis utiliti teras dan aplikasi dunia sebenar mereka
separa
Jenis utiliti Separa mengambil jenis dan menjadikan semua sifatnya sebagai pilihan. Jenis utiliti ini amat berharga apabila jenis bersarang, kerana ia menjadikan sifat pilihan secara rekursif.
Sebagai contoh, katakan anda sedang mencipta fungsi kemas kini profil pengguna. Dalam kes ini, jika pengguna tidak mahu mengemas kini semua medan, anda hanya boleh menggunakan jenis Separa dan hanya mengemas kini medan yang diperlukan. Ini sangat mudah dalam borang dan API yang tidak semua medan diperlukan.
Rujuk contoh kod berikut.
interface User { id: number; name: string; email?: string; } const updateUser = (user: Partial<User>) => { console.log(Updating user: ${user.name} ); }; updateUser({ name: 'Alice' });
Diperlukan
Jenis utiliti Diperlukan membina jenis dengan semua sifat jenis yang disediakan ditetapkan kepada diperlukan. Ini berguna untuk memastikan semua sifat tersedia sebelum menyimpan objek ke pangkalan data.
Sebagai contoh, jika Diperlukan digunakan untuk pendaftaran kereta, ia akan memastikan anda tidak terlepas sebarang sifat yang diperlukan seperti jenama, model dan perbatuan semasa membuat atau menyimpan rekod kereta baharu. Ini sangat kritikal dari segi integriti data.
Rujuk contoh kod berikut.
interface User { id: number; name: string; email?: string; } const updateUser = (user: Partial<User>) => { console.log(Updating user: ${user.name} ); }; updateUser({ name: 'Alice' });
Baca sahaja
Jenis utiliti Baca Sahaja mencipta jenis yang semua sifat adalah baca sahaja. Ini sangat berguna dalam pengurusan konfigurasi untuk melindungi tetapan kritikal daripada perubahan yang tidak diingini.
Sebagai contoh, apabila apl anda bergantung pada titik akhir API tertentu, apl tersebut tidak sepatutnya tertakluk kepada perubahan semasa pelaksanaannya. Menjadikannya baca sahaja menjamin bahawa ia akan kekal berterusan sepanjang kitaran hayat apl.
Rujuk contoh kod berikut.
interface Car { make: string; model: string; mileage?: number; } const myCar: Required<Car> = { make: 'Ford', model: 'Focus', mileage: 12000, };
Pilih
Jenis utiliti Pick** membina jenis dengan memilih set sifat daripada jenis sedia ada. Ini berguna apabila anda perlu menapis maklumat penting, seperti nama pengguna dan e-mel, untuk dipaparkan dalam papan pemuka atau paparan ringkasan. Ia membantu meningkatkan keselamatan dan kejelasan data.
Rujuk contoh kod berikut.
interface Config { apiEndpoint: string; } const config: Readonly<Config> = { apiEndpoint: 'https://api.example.com' }; // config.apiEndpoint = 'https://another-url.com'; // Error: Cannot assign to 'apiEndpoint'
tinggalkan
Jenis utiliti Omit membina jenis dengan mengecualikan sifat tertentu daripada jenis sedia ada.
Sebagai contoh, Abaikan akan berguna jika anda ingin berkongsi data pengguna dengan pihak ketiga tetapi tanpa maklumat sensitif, seperti alamat e-mel. Anda boleh melakukan ini dengan menentukan jenis baharu yang akan mengecualikan medan tersebut. Terutamanya dalam API, anda mungkin mahu melihat perkara yang berlaku di luar dalam respons API anda.
Lihat contoh kod seterusnya.
interface User { id: number; name: string; email: string; } type UserSummary = Pick<User, 'name' | 'email'>; const userSummary: UserSummary = { name: 'Alice', email: 'alice@example.com', };
Rekod
Jenis utiliti Rekod mencipta jenis objek dengan kunci dan nilai yang ditentukan, yang berguna apabila berurusan dengan pemetaan berstruktur.
Sebagai contoh, dalam konteks sistem pengurusan inventori, jenis Rekod boleh berguna dalam membuat pemetaan eksplisit antara item dan kuantiti. Dengan jenis struktur ini, data inventori boleh diakses dan diubah suai dengan mudah sambil memastikan semua hasil yang dijangka diambil kira.
interface User { id: number; name: string; email?: string; } const userWithoutEmail: Omit<User, 'email'> = { id: 1, name: 'Bob', };
Kecualikan
Jenis utiliti Exclude** membina jenis dengan mengecualikan jenis tertentu daripada kesatuan.
Anda boleh menggunakan Kecualikan apabila mereka bentuk fungsi yang sepatutnya hanya menerima jenis primitif tertentu (cth., nombor atau Boolean tetapi bukan rentetan). Ini boleh mengelakkan pepijat di mana jenis yang tidak dijangka mungkin menyebabkan ralat semasa pelaksanaan.
Rujuk contoh kod berikut.
type Fruit = 'apple' | 'banana' | 'orange'; type Inventory = Record<Fruit, number>; const inventory: Inventory = { apple: 10, banana: 5, orange: 0, };
Ekstrak
Jenis utiliti Extract membina jenis dengan mengekstrak jenis tertentu daripada kesatuan.
Dalam senario di mana anda perlu memproses hanya nilai angka daripada koleksi jenis campuran (seperti melakukan pengiraan), menggunakan Ekstrak memastikan hanya nombor yang dilalui. Ini berguna dalam saluran paip pemprosesan data yang mana penaipan yang ketat boleh menghalang ralat masa jalan.
Rujuk contoh kod berikut.
interface User { id: number; name: string; email?: string; } const updateUser = (user: Partial<User>) => { console.log(Updating user: ${user.name} ); }; updateUser({ name: 'Alice' });
NonNullable
Jenis utiliti NonNullable membina jenis dengan mengecualikan null dan undefined daripada jenis yang diberikan.
Dalam apl yang sesetengah nilai perlu ditakrifkan pada setiap masa, seperti nama pengguna atau ID produk, menjadikannya Tidak Boleh Dibatalkan akan memastikan bahawa medan kekunci tersebut tidak akan menjadi null atau tidak ditentukan. Ia berguna semasa pengesahan borang dan respons daripada API di mana nilai yang hilang mungkin akan menyebabkan masalah.
Rujuk contoh kod seterusnya.
interface Car { make: string; model: string; mileage?: number; } const myCar: Required<Car> = { make: 'Ford', model: 'Focus', mileage: 12000, };
ReturnType
Utiliti ReturnType mengekstrak jenis pemulangan fungsi.
Apabila bekerja dengan fungsi tertib tinggi atau panggil balik mengembalikan objek kompleks, seperti koordinat, menggunakan ReturnType memudahkan penentuan jenis pulangan yang dijangkakan tanpa perlu menyatakannya secara manual setiap kali. Ini boleh mempercepatkan pembangunan dengan mengurangkan pepijat berkaitan jenis yang tidak sepadan.
interface Config { apiEndpoint: string; } const config: Readonly<Config> = { apiEndpoint: 'https://api.example.com' }; // config.apiEndpoint = 'https://another-url.com'; // Error: Cannot assign to 'apiEndpoint'
Parameter
Utiliti Parameter mengekstrak jenis parameter fungsi sebagai tuple.
Ini membolehkan pengekstrakan mudah dan penggunaan semula jenis parameter dalam situasi di mana seseorang ingin memanipulasi atau mengesahkan parameter fungsi secara dinamik, seperti semasa menulis pembalut di sekeliling fungsi. Ia sangat meningkatkan kebolehgunaan semula dan kebolehselenggaraan kod di seluruh pangkalan kod anda dengan memastikan konsistensi tandatangan fungsi.
Rujuk contoh kod berikut.
interface User { id: number; name: string; email: string; } type UserSummary = Pick<User, 'name' | 'email'>; const userSummary: UserSummary = { name: 'Alice', email: 'alice@example.com', };
Kes penggunaan lanjutan dengan gabungan jenis utiliti
Menggabungkan jenis utiliti ini boleh memberi anda hasil yang hebat apabila membangunkan apl dengan TypeScript. Mari lihat beberapa senario di mana berbilang jenis utiliti berfungsi bersama dengan berkesan.
Menggabungkan Separa dan Diperlukan
Anda boleh mencipta jenis yang memerlukan medan tertentu sambil membenarkan yang lain menjadi pilihan.
interface User { id: number; name: string; email?: string; } const userWithoutEmail: Omit<User, 'email'> = { id: 1, name: 'Bob', };
Dalam contoh ini, UpdateUser memerlukan sifat id sambil membenarkan nama dan e-mel menjadi pilihan. Corak ini berguna untuk mengemas kini rekod yang pengecam mesti sentiasa ada.
Mencipta respons API yang fleksibel
Anda mungkin mahu mentakrifkan respons API yang boleh mempunyai bentuk yang berbeza berdasarkan syarat tertentu.
type Fruit = 'apple' | 'banana' | 'orange'; type Inventory = Record<Fruit, number>; const inventory: Inventory = { apple: 10, banana: 5, orange: 0, };
Di sini, ApiResponse membolehkan anda mencipta jenis respons yang fleksibel untuk panggilan API. Dengan menggunakan Pick , anda memastikan bahawa hanya data pengguna yang berkaitan disertakan dalam respons.
Menggabungkan Kecualikan dan Ekstrak untuk jenis penapisan
Anda mungkin menghadapi situasi di mana anda perlu menapis jenis tertentu daripada kesatuan berdasarkan kriteria tertentu.
Rujuk contoh kod berikut.
interface User { id: number; name: string; email?: string; } const updateUser = (user: Partial<User>) => { console.log(Updating user: ${user.name} ); }; updateUser({ name: 'Alice' });
Di sini, utiliti Exclude digunakan untuk mencipta jenis ( NonLoadingResponses ) yang mengecualikan loading daripada kesatuan ResponseTypes asal, membenarkan fungsi handleResponse menerima sahaja kejayaan atau ralat sebagai input yang sah.
Amalan terbaik
Gunakan hanya perlu
Walaupun jenis utiliti sangat berkuasa, penggunaan yang berlebihan boleh membawa kepada kod yang rumit dan tidak boleh dibaca. Adalah penting untuk mencapai keseimbangan antara memanfaatkan utiliti ini dan mengekalkan kejelasan kod.
Rujuk contoh kod seterusnya.
interface Car { make: string; model: string; mileage?: number; } const myCar: Required<Car> = { make: 'Ford', model: 'Focus', mileage: 12000, };
Kekalkan kejelasan
Pastikan tujuan setiap kes penggunaan utiliti adalah jelas. Elakkan meletakkan terlalu banyak utiliti bersama-sama, kerana ia boleh mengelirukan struktur yang dimaksudkan untuk jenis anda.
Rujuk contoh kod berikut.
interface Config { apiEndpoint: string; } const config: Readonly<Config> = { apiEndpoint: 'https://api.example.com' }; // config.apiEndpoint = 'https://another-url.com'; // Error: Cannot assign to 'apiEndpoint'
Pertimbangan prestasi
Walaupun kesan prestasi jarang berlaku pada masa jalan kerana jenis TypeScript hilang selepas penyusunan, jenis kompleks boleh melambatkan pengkompil TypeScript, menjejaskan kelajuan pembangunan.
interface User { id: number; name: string; email: string; } type UserSummary = Pick<User, 'name' | 'email'>; const userSummary: UserSummary = { name: 'Alice', email: 'alice@example.com', };
Kesimpulan
Tidak syak lagi bahawa TypeScript ialah salah satu bahasa yang paling popular dalam kalangan pembangun web. Jenis utiliti ialah salah satu ciri unik dalam TypeScript yang meningkatkan pengalaman pembangunan TypeScript dan kualiti kod dengan ketara apabila digunakan dengan betul. Walau bagaimanapun, kita tidak seharusnya menggunakannya untuk setiap senario kerana mungkin terdapat masalah prestasi dan kebolehselenggaraan kod.
Blog berkaitan
- Linters Terbaik untuk JavaScript dan TypeScript: Memudahkan Pengurusan Kualiti Kod
- 7 Rangka Kerja Ujian Unit JavaScript Setiap Pembangun Perlu Tahu
- Penggunaan Tanda Seru dalam TypeScript
- Memahami Jenis Bersyarat dalam TypeScript
Atas ialah kandungan terperinci Jenis Utiliti TypeScript: Panduan Lengkap. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas











JavaScript adalah asas kepada pembangunan web moden, dan fungsi utamanya termasuk pengaturcaraan yang didorong oleh peristiwa, penjanaan kandungan dinamik dan pengaturcaraan tak segerak. 1) Pengaturcaraan yang didorong oleh peristiwa membolehkan laman web berubah secara dinamik mengikut operasi pengguna. 2) Penjanaan kandungan dinamik membolehkan kandungan halaman diselaraskan mengikut syarat. 3) Pengaturcaraan Asynchronous memastikan bahawa antara muka pengguna tidak disekat. JavaScript digunakan secara meluas dalam interaksi web, aplikasi satu halaman dan pembangunan sisi pelayan, sangat meningkatkan fleksibiliti pengalaman pengguna dan pembangunan silang platform.

Trend terkini dalam JavaScript termasuk kebangkitan TypeScript, populariti kerangka dan perpustakaan moden, dan penerapan webassembly. Prospek masa depan meliputi sistem jenis yang lebih berkuasa, pembangunan JavaScript, pengembangan kecerdasan buatan dan pembelajaran mesin, dan potensi pengkomputeran IoT dan kelebihan.

Enjin JavaScript yang berbeza mempunyai kesan yang berbeza apabila menguraikan dan melaksanakan kod JavaScript, kerana prinsip pelaksanaan dan strategi pengoptimuman setiap enjin berbeza. 1. Analisis leksikal: Menukar kod sumber ke dalam unit leksikal. 2. Analisis Tatabahasa: Menjana pokok sintaks abstrak. 3. Pengoptimuman dan Penyusunan: Menjana kod mesin melalui pengkompil JIT. 4. Jalankan: Jalankan kod mesin. Enjin V8 mengoptimumkan melalui kompilasi segera dan kelas tersembunyi, Spidermonkey menggunakan sistem kesimpulan jenis, menghasilkan prestasi prestasi yang berbeza pada kod yang sama.

JavaScript adalah bahasa utama pembangunan web moden dan digunakan secara meluas untuk kepelbagaian dan fleksibiliti. 1) Pembangunan front-end: Membina laman web dinamik dan aplikasi satu halaman melalui operasi DOM dan kerangka moden (seperti React, Vue.js, sudut). 2) Pembangunan sisi pelayan: Node.js menggunakan model I/O yang tidak menyekat untuk mengendalikan aplikasi konkurensi tinggi dan masa nyata. 3) Pembangunan aplikasi mudah alih dan desktop: Pembangunan silang platform direalisasikan melalui reaktnatif dan elektron untuk meningkatkan kecekapan pembangunan.

Python lebih sesuai untuk pemula, dengan lengkung pembelajaran yang lancar dan sintaks ringkas; JavaScript sesuai untuk pembangunan front-end, dengan lengkung pembelajaran yang curam dan sintaks yang fleksibel. 1. Sintaks Python adalah intuitif dan sesuai untuk sains data dan pembangunan back-end. 2. JavaScript adalah fleksibel dan digunakan secara meluas dalam pengaturcaraan depan dan pelayan.

Artikel ini menunjukkan integrasi frontend dengan backend yang dijamin oleh permit, membina aplikasi edtech SaaS yang berfungsi menggunakan Next.Js. Frontend mengambil kebenaran pengguna untuk mengawal penglihatan UI dan memastikan permintaan API mematuhi dasar peranan

Peralihan dari C/C ke JavaScript memerlukan menyesuaikan diri dengan menaip dinamik, pengumpulan sampah dan pengaturcaraan asynchronous. 1) C/C adalah bahasa yang ditaip secara statik yang memerlukan pengurusan memori manual, manakala JavaScript ditaip secara dinamik dan pengumpulan sampah diproses secara automatik. 2) C/C perlu dikumpulkan ke dalam kod mesin, manakala JavaScript adalah bahasa yang ditafsirkan. 3) JavaScript memperkenalkan konsep seperti penutupan, rantaian prototaip dan janji, yang meningkatkan keupayaan pengaturcaraan fleksibiliti dan asynchronous.

Saya membina aplikasi SaaS multi-penyewa berfungsi (aplikasi edTech) dengan alat teknologi harian anda dan anda boleh melakukan perkara yang sama. Pertama, apakah aplikasi SaaS multi-penyewa? Aplikasi SaaS Multi-penyewa membolehkan anda melayani beberapa pelanggan dari Sing
