Rumah hujung hadapan web tutorial js Apa yang membingungkan mengenai kesimpulan jenis jenis: Empat jenis mempunyai hasil yang sama, dan masalah yang sepadan dengan jenis bersyarat dengan jenis kesatuan?

Apa yang membingungkan mengenai kesimpulan jenis jenis: Empat jenis mempunyai hasil yang sama, dan masalah yang sepadan dengan jenis bersyarat dengan jenis kesatuan?

Apr 04, 2025 pm 05:33 PM
typescript Penyelesaian

Subtleties Jenis Jenis Kesimpulan: Hasil yang sama dari Empat Jenis Definisi dan Masalah Padanan antara Jenis Bersyarat dan Jenis Kesatuan

Artikel ini menerangkan sebab -sebab mengapa beberapa definisi jenis yang kelihatan berbeza dalam TypeScript menghasilkan hasil yang sama, dan menjelaskan masalah jenis bersyarat yang sepadan dengan jenis kesatuan.

Pertama, kita menganalisis definisi empat jenis getReturnType :

 Taipkan getReturnType1<t> = T meluas (... args: tidak pernah) => menyimpulkan r? R: tidak pernah;
Taip getReturnType2<t> = T meluas (... args: tidak pernah []) => menyimpulkan r? R: tidak pernah;
Taip getReturnType3<t> = T meluas (... args: mana -mana []) => menyimpulkan r? R: tidak pernah;
Taip getReturnType4<t> = T meluas (... args: mana -mana) => menyimpulkan r? R: tidak pernah;</t></t></t></t>
Salin selepas log masuk

Semua empat definisi jenis direka untuk menyimpulkan jenis nilai pulangan mereka dari jenis fungsi. Walaupun jenis parameter (...args: never) , (...args: never[]) , (...args: any[]) dan (...args: any) kelihatan berbeza, mereka melakukan secara konsisten dalam kesimpulan jenis. Ini kerana kata kunci extends terutamanya memberi tumpuan kepada bilangan parameter dan jenis nilai pulangan fungsi, dan tidak semestinya memeriksa butiran jenis parameter. never mewakili jenis yang mustahil, any mewakili apa -apa jenis, dan never[] mewakili array kosong; Perbezaan ini diabaikan semasa proses penyimpanan jenis nilai pulangan. Oleh itu, jenis nilai R fungsi boleh disimpulkan dengan betul.

Seterusnya, kami menganalisis masalah yang jenis bersyarat tidak sepadan dengan jenis kesatuan:

 jenis alat peraga<t extends major rescategorylabel> = {
  Labels: t [];
  setSelect: (indeks: nombor, label: t melanjutkan utama? Major: RescategoryLabel) => void;
  xxx;
};

const changeSelect = (
  Indeks: nombor,
  Label: Major | RescategoryLabel,
  E: React.MouseEvent<htmlanchorelement> | React.TouchEvent<htmlanchorelement>
) => {
  setSelect (indeks, label);
  ActiveTabTocenter (e.currentTarget sebagai htmlelement);
};</htmlanchorelement></htmlanchorelement></t>
Salin selepas log masuk

label parameter kedua fungsi setSelect ditakrifkan sebagai T extends Major ? Major : ResCategoryLabel . Masalahnya ialah apabila T adalah Major | ResCategoryLabel , TypeScript tidak dapat menentukan jenis label . Jenis bersyarat cuba memilih jenis berdasarkan sama ada T adalah Major , tetapi T mungkin menjadi Major atau ResCategoryLabel , menyebabkan kesimpulan jenis gagal memberikan jenis tertentu, mengakibatkan kesilapan jenis tidak sepadan. Ini bukan kesilapan logik kod, tetapi batasan sistem jenis TypeScript apabila berurusan dengan jenis kesatuan dan jenis bersyarat. Penyelesaian mungkin memerlukan refactoring jenis definisi jenis Props atau fungsi setSelect , seperti menggunakan penegasan jenis atau lebih banyak definisi jenis berbutir untuk menaip label secara eksplisit.

Apa yang membingungkan mengenai kesimpulan jenis jenis: Empat jenis mempunyai hasil yang sama, dan masalah jenis bersyarat yang sepadan dengan jenis kesatuan?

Atas ialah kandungan terperinci Apa yang membingungkan mengenai kesimpulan jenis jenis: Empat jenis mempunyai hasil yang sama, dan masalah yang sepadan dengan jenis bersyarat dengan jenis kesatuan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

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

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Tutorial Java
1664
14
Tutorial PHP
1267
29
Tutorial C#
1239
24
Adakah perisian keselamatan syarikat menyebabkan aplikasi gagal dijalankan? Bagaimana cara menyelesaikan masalah dan menyelesaikannya? Adakah perisian keselamatan syarikat menyebabkan aplikasi gagal dijalankan? Bagaimana cara menyelesaikan masalah dan menyelesaikannya? Apr 19, 2025 pm 04:51 PM

Penyelesaian masalah dan penyelesaian kepada perisian keselamatan syarikat yang menyebabkan beberapa aplikasi tidak berfungsi dengan baik. Banyak syarikat akan menggunakan perisian keselamatan untuk memastikan keselamatan rangkaian dalaman. …

Apa yang perlu dilakukan jika penggunaan memori redis terlalu tinggi? Apa yang perlu dilakukan jika penggunaan memori redis terlalu tinggi? Apr 10, 2025 pm 02:21 PM

Memori Redis melonjak termasuk: jumlah data yang terlalu besar, pemilihan struktur data yang tidak betul, masalah konfigurasi (seperti tetapan MaxMemory terlalu kecil), dan kebocoran memori. Penyelesaian termasuk: penghapusan data yang telah tamat tempoh, menggunakan teknologi mampatan, memilih struktur yang sesuai, menyesuaikan parameter konfigurasi, memeriksa kebocoran memori dalam kod, dan kerap memantau penggunaan memori.

Isu Kebenaran Pemasangan Minio Centos Isu Kebenaran Pemasangan Minio Centos Apr 14, 2025 pm 02:00 PM

Isu dan penyelesaian keizinan untuk pemasangan minio di bawah sistem CentOS Apabila menggunakan minio di persekitaran CentOS, isu kebenaran adalah masalah biasa. Artikel ini akan memperkenalkan beberapa masalah kebenaran umum dan penyelesaiannya untuk membantu anda menyelesaikan pemasangan dan konfigurasi minio dengan lancar. Ubah suai akaun lalai dan kata laluan: Anda boleh mengubah suai nama pengguna dan kata laluan lalai dengan menetapkan pembolehubah persekitaran minio_root_user dan minio_root_password. Selepas pengubahsuaian, memulakan semula perkhidmatan minio akan berkuatkuasa. Konfigurasikan keizinan akses baldi: Menetapkan baldi kepada orang ramai akan menyebabkan direktori dilalui, yang menimbulkan risiko keselamatan. Adalah disyorkan untuk menyesuaikan dasar akses baldi. Anda boleh menggunakan minio

Cara membuat pangkalan data mysql menggunakan phpmyadmin Cara membuat pangkalan data mysql menggunakan phpmyadmin Apr 10, 2025 pm 10:48 PM

PHPMyAdmin boleh digunakan untuk membuat pangkalan data dalam projek PHP. Langkah -langkah khusus adalah seperti berikut: Log masuk ke phpmyadmin dan klik butang "Baru". Masukkan nama pangkalan data yang ingin anda buat, dan perhatikan bahawa ia mematuhi peraturan penamaan MySQL. Tetapkan set aksara, seperti UTF-8, untuk mengelakkan masalah.

Apakah salah faham yang biasa dalam konfigurasi CentOS HDFS? Apakah salah faham yang biasa dalam konfigurasi CentOS HDFS? Apr 14, 2025 pm 07:12 PM

Masalah dan penyelesaian biasa untuk konfigurasi sistem fail diedarkan Hadoop (HDFS) di bawah CentOS Apabila membina kluster HadoophDFS di CentOS, beberapa kesilapan biasa boleh menyebabkan kemerosotan prestasi, kehilangan data dan juga kelompok tidak dapat dimulakan. Artikel ini meringkaskan masalah umum dan penyelesaian mereka untuk membantu anda mengelakkan perangkap ini dan memastikan kestabilan dan operasi yang cekap dari kelompok HDFS anda. Ralat Konfigurasi Rack-Aware: Masalah: Maklumat yang menyedari rak tidak dikonfigurasi dengan betul, mengakibatkan pengagihan replika blok data yang tidak sekata dan peningkatan beban rangkaian. Penyelesaian: Semak semula konfigurasi rak-aware dalam fail hdfs-site.xml dan gunakan hdfsdfsadmin-printtopo

Boleh kod vs dijalankan di Windows 8 Boleh kod vs dijalankan di Windows 8 Apr 15, 2025 pm 07:24 PM

Kod VS boleh dijalankan pada Windows 8, tetapi pengalaman mungkin tidak hebat. Mula -mula pastikan sistem telah dikemas kini ke patch terkini, kemudian muat turun pakej pemasangan kod VS yang sepadan dengan seni bina sistem dan pasangnya seperti yang diminta. Selepas pemasangan, sedar bahawa beberapa sambungan mungkin tidak sesuai dengan Windows 8 dan perlu mencari sambungan alternatif atau menggunakan sistem Windows yang lebih baru dalam mesin maya. Pasang sambungan yang diperlukan untuk memeriksa sama ada ia berfungsi dengan betul. Walaupun kod VS boleh dilaksanakan pada Windows 8, disyorkan untuk menaik taraf ke sistem Windows yang lebih baru untuk pengalaman dan keselamatan pembangunan yang lebih baik.

Bolehkah kod studio visual digunakan dalam python Bolehkah kod studio visual digunakan dalam python Apr 15, 2025 pm 08:18 PM

Kod VS boleh digunakan untuk menulis Python dan menyediakan banyak ciri yang menjadikannya alat yang ideal untuk membangunkan aplikasi python. Ia membolehkan pengguna untuk: memasang sambungan python untuk mendapatkan fungsi seperti penyempurnaan kod, penonjolan sintaks, dan debugging. Gunakan debugger untuk mengesan kod langkah demi langkah, cari dan selesaikan kesilapan. Mengintegrasikan Git untuk Kawalan Versi. Gunakan alat pemformatan kod untuk mengekalkan konsistensi kod. Gunakan alat linting untuk melihat masalah yang berpotensi lebih awal.

Bagaimana untuk menangani pemecahan memori Redis? Bagaimana untuk menangani pemecahan memori Redis? Apr 10, 2025 pm 02:24 PM

Pemecahan ingatan redis merujuk kepada kewujudan kawasan bebas kecil dalam ingatan yang diperuntukkan yang tidak dapat ditugaskan semula. Strategi mengatasi termasuk: Mulakan semula Redis: Kosongkan memori sepenuhnya, tetapi perkhidmatan mengganggu. Mengoptimumkan struktur data: Gunakan struktur yang lebih sesuai untuk Redis untuk mengurangkan bilangan peruntukan dan siaran memori. Laraskan parameter konfigurasi: Gunakan dasar untuk menghapuskan pasangan nilai kunci yang paling kurang baru-baru ini. Gunakan mekanisme kegigihan: sandarkan data secara teratur dan mulakan semula redis untuk membersihkan serpihan. Pantau penggunaan memori: Cari masalah tepat pada masanya dan ambil langkah.

See all articles