Membuka kebolehgunaan semula dengan generik jenis
Sep 16, 2025 am 03:14 AMGenerik TypeScript membolehkan kod yang boleh diguna semula, jenis selamat dengan membenarkan fungsi, antara muka, dan komponen berfungsi dengan pelbagai jenis semasa memelihara maklumat jenis. 1. Generik menggunakan pembolehubah jenis seperti T untuk mewakili jenis pemegang tempat, seperti yang dilihat dalam fungsi identiti, memelihara keselamatan jenis tidak seperti mana -mana. 2. 3. Menggunakan Extends, generik boleh dikekang untuk memastikan sifat yang diperlukan, seperti t meluas {id: nombor} untuk objek dengan medan ID. 4. Pelbagai jenis parameter (contohnya, k, v, r) menyokong transformasi kompleks seperti MapObject, dan jenis lalai (contohnya, t = tidak diketahui) meningkatkan kebolehgunaan tanpa mengorbankan fleksibiliti. 5. Generik digunakan secara meluas dalam fungsi utiliti, cangkuk reaksi seperti USEFetch
Generik TypeScript adalah salah satu ciri yang paling kuat untuk menulis kod yang boleh diguna semula, jenis-selamat. Mereka membolehkan anda membuat komponen, fungsi, atau kelas yang bekerja lebih dari pelbagai jenis dan bukannya satu sama dengan maklumat jenis pengorbanan. Ini membuka fleksibiliti sambil mengekalkan menaip yang kuat, yang penting dalam aplikasi berskala besar.

Mari kita pecahkan bagaimana generik membantu anda membina lebih banyak kod yang boleh diguna semula dan bila menggunakannya.
1. Apa itu generik? (Dan mengapa anda memerlukannya)
Pada teras mereka, generik membolehkan anda menulis fungsi atau struktur data yang boleh mengendalikan jenis yang berbeza semasa mengekalkan keselamatan jenis.

Sebagai contoh, bayangkan fungsi identiti mudah:
identiti fungsi (arg: mana -mana): mana -mana { kembali arg; }
Ini berfungsi -tetapi ia membuang maklumat jenis. Dengan generik, anda memeliharanya:

Fungsi Identiti <T> (arg: t): t { kembali arg; }
Di sini, T
adalah pemboleh ubah jenis -pemegang tempat untuk jenis apa pun yang akan digunakan apabila fungsi dipanggil.
Anda boleh menyebutnya seperti ini:
const num = identiti (42); // Jenis: Nombor const str = identiti ("hello"); // Jenis: String
TypeScript T
secara automatik, jadi anda tidak perlu menulis identity<number>(42)
.
Ini mungkin kelihatan remeh, tetapi ia menjadi kritikal apabila membina utiliti seperti cache, API, atau pengurus negeri di mana jenis berbeza tetapi tingkah laku tetap konsisten.
2. Menggunakan generik dalam fungsi dan antara muka
Generik benar -benar bersinar apabila melengkapkan logik merentasi pelbagai jenis.
Contoh: Pembungkus tindak balas API generik
Katakan anda mengendalikan respons API dengan bentuk yang konsisten:
Antara muka Apiresponse <T> { Data: t; Status: Nombor; Mesej?: String; }
Sekarang anda boleh menggunakan semula antara muka ini di titik akhir yang berbeza:
const userresponse: apiresponse <user> = { data: {id: 1, nama: "Alice"}, Status: 200, }; const postsresponse: apiresponse <post []> = { data: [{id: 1, tajuk: "hello"}], Status: 200, };
Komponen atau perkhidmatan anda kini boleh mengendalikan ApiResponse<T>
tanpa mengetahui bentuk T
yang tepat, namun masih menawarkan pemeriksaan autocomplete dan jenis penuh.
3. Mengekang generik dengan extends
Kadang -kadang anda mahukan fleksibiliti -tetapi tidak terlalu banyak . Anda boleh menyekat jenis yang diterima generik menggunakan extends
.
Sebagai contoh, katakan anda mahu fungsi yang mengekstrak harta dari objek, tetapi hanya jika ia mempunyai medan id
:
fungsi logid <t meluas {id: nombor}> (item: t): void { console.log (item.id); }
Sekarang ini memastikan sebarang hujah yang diluluskan mesti mempunyai id
jenis number
:
logID ({id: 123, nama: "bob"}); // ? ok logID ({name: "Charlie"}); // ? Ralat: hilang 'id'
Corak ini adalah perkara biasa dalam fungsi utiliti, pengendali bentuk, atau serializers di mana anda memerlukan jaminan struktur.
4. Pelbagai jenis parameter dan jenis lalai
Anda tidak terhad kepada satu jenis generik.
fungsi MapObject <k, v, r> ( OBJ: Rekod <k, v>, fn: (nilai: v) => r ): Rekod <k, r> { kembali objek.Fromentries ( Object.entries (obj) .map (([kunci, nilai]) => [kunci, fn (nilai)]) ) sebagai rekod <k, r>; }
Juga, anda boleh menyediakan jenis lalai untuk ergonomik yang lebih baik:
antara muka queryResult <t = unknown> { Data: t; Memuatkan: Boolean; }
Sekarang QueryResult
mungkir kepada unknown
jika tiada jenis ditentukan, tetapi tetap fleksibel.
5. Komponen yang boleh diguna semula dalam amalan
Generik sangat berguna dalam:
- Fungsi utiliti (misalnya,
pick
,omit
,deepClone
) - Pengurusan Negeri (contohnya, tindakan, pengurangan dengan jenis muatan)
- Komponen React (misalnya, bentuk, modal yang menerima prop generik)
- Cangkuk pengambilan data (misalnya,
useFetch<T>()
)
Contoh: cangkuk reaksi generik
fungsi useFetch <t> (url: string): {data: t | null; Memuatkan: Boolean} { const [data, setData] = useState <t | null> (null); const [loading, setloading] = useState (true); useeffect (() => { Ambil (URL) .then (r => r.json ()) .talu (data => setData (data sebagai t)) .finally (() => setloading (false)); }, [url]); kembali {data, memuatkan}; } // Penggunaan const {data} = useFetch <user []> ("/api/pengguna");
Di sini, cangkuk yang sama dengan selamat mengendalikan sebarang jenis tindak balas yang diharapkan.
Generik mungkin merasa abstrak pada mulanya, tetapi mereka hanya cara TypeScript untuk membiarkan anda menulis kod masa depan . Sebaik sahaja anda mula menggunakannya, anda akan mendapati diri anda menduplikasi kurang, refactoring dengan keyakinan, dan menangkap bug pada masa penyusunan.
Pada asasnya: jika anda mengulangi logik yang sama untuk pelbagai jenis, sudah tiba masanya untuk mencapai generik.
Atas ialah kandungan terperinci Membuka kebolehgunaan semula dengan generik jenis. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undress AI Tool
Gambar buka pakaian secara percuma

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

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

Stock Market GPT
Penyelidikan pelaburan dikuasakan AI untuk keputusan yang lebih bijak

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)

Fungsi generik dalam Go menyelesaikan masalah jenis variadik: fungsi generik membenarkan parameter jenis ditentukan semasa masa jalan. Ini memungkinkan untuk menulis fungsi yang boleh mengendalikan hujah pelbagai jenis. Sebagai contoh, fungsi Max ialah fungsi generik yang menerima dua parameter setanding dan mengembalikan nilai yang lebih besar. Dengan menggunakan fungsi generik, kita boleh menulis kod yang lebih fleksibel dan umum yang boleh mengendalikan pelbagai jenis parameter.

Senario aplikasi generik dalam Go: Operasi pengumpulan: Buat operasi pengumpulan yang sesuai untuk sebarang jenis, seperti penapisan. Struktur Data: Tulis struktur data tujuan umum seperti baris gilir, tindanan dan peta untuk menyimpan dan memanipulasi pelbagai jenis data. Algoritma: Tulis algoritma tujuan umum seperti pengisihan, carian dan pengurangan yang boleh mengendalikan pelbagai jenis data.

Kesan generik pada tandatangan dan parameter fungsi Go termasuk: Parameter jenis: Tandatangan fungsi boleh mengandungi parameter jenis, menyatakan jenis yang boleh digunakan oleh fungsi. Kekangan jenis: Parameter jenis boleh mempunyai kekangan yang menentukan syarat yang mesti dipenuhi. Inferens jenis parameter: Pengkompil boleh membuat kesimpulan jenis parameter jenis yang tidak ditentukan. Menentukan jenis: Jenis parameter boleh dinyatakan secara eksplisit untuk memanggil fungsi generik. Ini meningkatkan kebolehgunaan semula dan fleksibiliti kod, membolehkan anda menulis fungsi dan jenis yang boleh digunakan dengan berbilang jenis.

Gabungan jenis penghitungan dan generik dalam Java: Apabila mengisytiharkan penghitungan dengan generik, anda perlu menambah kurungan sudut, dan T ialah parameter jenis. Apabila membuat kelas generik, anda juga perlu menambah kurungan sudut, T ialah parameter jenis yang boleh menyimpan sebarang jenis. Gabungan ini meningkatkan fleksibiliti kod, keselamatan jenis dan memudahkan kod.

Generik fungsi Java membenarkan menetapkan sempadan atas dan bawah. Extends menentukan bahawa jenis data yang diterima atau dikembalikan oleh fungsi mestilah subjenis daripada jenis yang ditentukan, mis. Sempadan bawah (super) menentukan bahawa jenis data yang diterima atau dikembalikan oleh fungsi mestilah superjenis jenis yang ditentukan, mis. Penggunaan generik meningkatkan kebolehgunaan semula kod dan keselamatan.

Had fungsi generik Go: hanya parameter jenis disokong, parameter nilai tidak disokong. Pengulangan fungsi tidak disokong. Parameter jenis tidak boleh ditentukan secara eksplisit, ia disimpulkan oleh pengkompil.

Perbezaan antara templat dan generik dalam C++: Templat: ditakrifkan pada masa penyusunan, ditaip dengan jelas, kecekapan tinggi dan saiz kod yang kecil. Generik: menaip masa jalan, antara muka abstrak, menyediakan fleksibiliti, kecekapan rendah.

Kaedah generik Java secara automatik menyimpulkan parameter jenis tanpa pengisytiharan eksplisit. Peraturan termasuk: 1. Gunakan pengisytiharan jenis eksplisit; 2. Buat kesimpulan jenis tunggal; Ini memudahkan kod, menjadikannya lebih mudah untuk menulis dan menggunakan kaedah generik.
