


Apa yang membingungkan mengenai kesimpulan jenis jenis: Empat jenis mempunyai hasil yang sama, dan masalah yang sepadan dengan jenis bersyarat dengan jenis kesatuan?
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>
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>
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.
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!

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











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. …

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 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

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.

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

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.

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.

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.
