国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

Jadual Kandungan
Jenis struktur
Koleksi jenis sebagai nilai yang sepadan
Jenis Kesatuan
Jenis penyempitan
Jenis kesatuan yang membezakan
Bacaan lanjut
kesimpulannya
Rumah hujung hadapan web tutorial css Demystifying Typescript Discriminated Union

Demystifying Typescript Discriminated Union

Mar 14, 2025 am 10:57 AM

Demystifying Typescript Discriminated Union

TypeScript adalah alat yang berkuasa untuk membina aplikasi JavaScript berskala dan hampir menjadi standard untuk projek Web JavaScript yang besar. Walau bagaimanapun, untuk pemula, TypeScript juga mempunyai beberapa perkara yang rumit, salah satunya adalah membezakan antara jenis kesatuan.

Pertimbangkan kod berikut:

 Kucing antara muka {
  Berat: Nombor;
  Whiskers: Nombor;
}
Antara muka anjing {
  Berat: Nombor;
  Mesra: Boolean;
}
Let Animal: Anjing |

Ramai pemaju akan terkejut mendapati bahawa apabila mengakses animal , hanya atribut weight yang sah, manakala whiskers dan atribut friendly tidak sah. Artikel ini akan menjelaskan sebab -sebabnya.

Sebelum kita menyelam ke dalamnya, mari kita mengkaji semula jenis struktur dan nominal dengan cepat, yang akan membantu memahami perbezaan TypeScript antara jenis kesatuan.

Jenis struktur

Cara terbaik untuk memahami jenis struktur adalah membandingkannya dengan jenis nominal. Kebanyakan bahasa yang ditaip yang mungkin anda gunakan adalah ditaip secara nominal. Sebagai contoh, kod C# (Java atau C serupa):

 kelas foo {
  public int x;
}
kelas blah {
  public int x;
}

Walaupun Foo dan Blah mempunyai struktur yang sama, mereka tidak dapat memberikan nilai antara satu sama lain. Kod berikut:

 Blah b = baru foo ();

Kesalahan berikut akan dihasilkan:

<code>無(wú)法隱式轉(zhuǎn)換類型“Foo”為“Blah”</code>

Struktur kelas ini tidak penting. Pembolehubah jenis Foo hanya boleh diberikan kepada contoh kelas Foo (atau subkelasnya).

Typescript, sebaliknya, mengamalkan jenis struktur. TypeScript menganggap mereka serasi jika kedua -dua jenis mempunyai struktur yang sama.

Oleh itu, kod berikut berfungsi dengan baik:

 kelas foo {
  x: nombor = 0;
}
kelas blah {
  x: nombor = 0;
}
Let f: foo = new blah ();
Let B: blah = baru foo ();

Koleksi jenis sebagai nilai yang sepadan

Mari kita jelaskan ini lebih lanjut. Memandangkan kod berikut:

 kelas foo {
  x: nombor = 0;
}

Biarkan f: foo;

f ialah pembolehubah yang boleh memegang sebarang objek yang sama dengan struktur kelas Foo , dalam kes ini, yang bermaksud x harta yang mewakili nombor. Ini bermakna walaupun objek JavaScript biasa boleh diterima.

 Biarkan f: foo;
f = {
  x: 0
};

Jenis Kesatuan

Mari kembali ke kod pada permulaan artikel ini:

 Kucing antara muka {
  Berat: Nombor;
  Whiskers: Nombor;
}
Antara muka anjing {
  Berat: Nombor;
  Mesra: Boolean;
}

Kami tahu:

 biarkan haiwan: anjing;

Buat animal apa -apa objek dengan struktur yang sama seperti antara muka Dog . Jadi apa maksud kod berikut?

 Let Animal: Anjing |

Ini mentakrifkan jenis animal sebagai objek yang sepadan dengan antara muka Dog , atau mana -mana objek yang sepadan dengan antara muka Cat .

Jadi mengapa animal sekarang hanya membenarkan kita mengakses atribut weight ? Ringkasnya, ia adalah kerana TypeScript tidak tahu jenisnya. TypeScript tahu animal mestilah Dog atau Cat , tetapi mungkin sama ada. Jika kita dibenarkan mengakses harta friendly , tetapi dalam contoh animal sebenarnya Cat dan bukan Dog , ia boleh mengakibatkan ralat runtime. Begitu juga dengan atribut whiskers .

Jenis Kesatuan adalah kesatuan nilai yang sah, bukan kesatuan atribut. Pemaju sering menulis kod seperti ini:

 Let Animal: Anjing |

Dan mengharapkan animal mempunyai kesatuan Dog dan sifat Cat . Tetapi ini adalah satu lagi kesilapan. Ini menentukan animal mempunyai nilai yang sepadan dengan sendi Dog yang sah dan nilai Cat yang sah. Tetapi TypeScript hanya membolehkan anda mengakses sifat yang diketahui ada. Pada masa ini, ini bermakna semua jenis sifat dalam Kesatuan.

Jenis penyempitan

Sekarang, kita ada:

 Let Animal: Anjing |

Apabila animal adalah Dog , bagaimanakah kita memperlakukannya dengan betul sebagai Dog dan sifat akses pada antara muka Dog , dan juga mengendalikannya ketika Cat ? Pada masa ini, kita boleh menggunakan pengendali in . Ini adalah pengendali JavaScript lama yang anda tidak dapat melihat dengan kerap, yang membolehkan kami menguji sama ada sesuatu harta dalam objek. Contohnya:

 biarkan o = {a: 12};

"A" dalam O;
"X" dalam O;

Ternyata bahawa TypeScript sangat terintegrasi dengan pengendali in . Mari lihat cara menggunakan:

 Let Animal: Dog |

jika ("mesra" dalam haiwan) {
  console.log (haiwan.friendly);
} else {
  Console.log (Animal.Whiskers);
}

Kod ini tidak akan menghasilkan kesilapan. Di dalam blok if , TypeScript tahu bahawa terdapat harta friendly , jadi menukarkan animal kepada Dog . Di dalam blok else , TypeScript juga merawat animal sebagai Cat . Anda juga boleh melihat ini dalam editor kod dengan melayang tetikus anda ke atas objek animal di blok ini.

Jenis kesatuan yang membezakan

Anda mungkin mengharapkan catatan blog berakhir di sini, tetapi malangnya, menyempitkan jenis kesatuan sangat terhad dengan memeriksa jika sifat itu wujud. Ia berfungsi dengan baik untuk jenis Dog dan Cat mudah kita, tetapi apabila kita mempunyai lebih banyak jenis dan lebih banyak pertindihan antara jenis ini, perkara -perkara dengan mudah dapat menjadi lebih kompleks dan rapuh.

Di sinilah membezakan jenis kesatuan yang berguna. Kami akan menyimpan segala -galanya dari sebelumnya, hanya menambah harta kepada setiap jenis, yang satu -satunya tujuannya adalah untuk membezakan (atau "membezakan") jenis ini:

 Kucing antara muka {
  Berat: Nombor;
  Whiskers: Nombor;
  Animal_type: "kucing";
}
Antara muka anjing {
  Berat: Nombor;
  Mesra: Boolean;
  Animal_type: "anjing";
}

Perhatikan atribut ANIMAL_TYPE pada kedua -dua jenis. Jangan salahkan untuk rentetan dengan dua nilai yang berbeza; ANIMAL_TYPE: "CAT";

Sekarang pemeriksaan kami menjadi lebih dipercayai:

 Let Animal: Dog |

jika (haiwan.animal_type === "anjing") {
  console.log (haiwan.friendly);
} else {
  Console.log (Animal.Whiskers);
}

Pemeriksaan ini akan menjadi kebocoran dengan mengandaikan bahawa setiap jenis yang mengambil bahagian dalam kesatuan mempunyai nilai yang berbeza dari atribut ANIMAL_TYPE .

Satu -satunya kelemahan adalah bahawa anda kini perlu berurusan dengan harta baru. Setiap kali contoh Dog atau Cat dicipta, anda mesti memberikan nilai yang unik untuk ANIMAL_TYPE . Tetapi jangan bimbang tentang melupakan, kerana TypeScript akan mengingatkan anda. ?

Bacaan lanjut

Jika anda ingin mengetahui lebih lanjut, saya cadangkan membaca dokumentasi TypeScript mengenai jenis penyempitan. Ini akan memberi kita pandangan yang lebih mendalam mengenai apa yang kita sedang berbincang di sini. Terdapat seksyen mengenai penegasan jenis dalam pautan ini. Ini membolehkan anda menentukan pemeriksaan tersuai anda sendiri untuk menyempitkan jenis tanpa menggunakan diskriminator jenis atau bergantung pada kata kunci in .

kesimpulannya

Pada permulaan artikel ini, saya berkata, dalam contoh berikut, mengapa weight adalah satu -satunya harta yang boleh diakses:

 Kucing antara muka {
  Berat: Nombor;
  Whiskers: Nombor;
}
Antara muka anjing {
  Berat: Nombor;
  Mesra: Boolean;
}
Let Animal: Anjing |

Apa yang kita pelajari ialah TypeScript hanya tahu animal boleh menjadi Dog atau Cat , tetapi tidak kedua -duanya. Oleh itu, kita hanya boleh mendapatkan weight , yang merupakan satu -satunya harta awam di antara keduanya.

Konsep jenis kesatuan yang membezakan adalah cara TypeScript membezakan objek ini, dan pendekatan ini sangat berskala, walaupun untuk koleksi objek yang lebih besar. Oleh itu, kita perlu membuat harta ANIMAL_TYPE baru pada kedua -dua jenis yang memegang satu nilai literal yang boleh kita gunakan untuk memeriksa. Sudah tentu, ini adalah satu lagi perkara yang perlu dijejaki, tetapi ia juga menghasilkan hasil yang lebih dipercayai - yang mana yang kita inginkan dari TypeScript di tempat pertama.

Atas ialah kandungan terperinci Demystifying Typescript Discriminated Union. 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

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

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.

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 PHP
1488
72
Tutorial CSS untuk membuat pemuatan dan animasi pemuatan Tutorial CSS untuk membuat pemuatan dan animasi pemuatan Jul 07, 2025 am 12:07 AM

Terdapat tiga cara untuk membuat pemutar pemuatan CSS: 1. Gunakan pemutar asas sempadan untuk mencapai animasi mudah melalui HTML dan CSS; 2. Gunakan pemutar tersuai pelbagai mata untuk mencapai kesan lompat melalui masa kelewatan yang berlainan; 3. Tambahkan pemutar dalam butang dan beralih kelas melalui JavaScript untuk memaparkan status pemuatan. Setiap pendekatan menekankan pentingnya butiran reka bentuk seperti warna, saiz, kebolehcapaian dan pengoptimuman prestasi untuk meningkatkan pengalaman pengguna.

Menangani masalah dan awalan keserasian penyemak imbas CSS Menangani masalah dan awalan keserasian penyemak imbas CSS Jul 07, 2025 am 01:44 AM

Untuk menangani keserasian pelayar CSS dan isu awalan, anda perlu memahami perbezaan sokongan penyemak imbas dan menggunakan awalan vendor dengan munasabah. 1. Memahami masalah biasa seperti Flexbox dan sokongan grid, kedudukan: prestasi tidak sah, dan prestasi animasi adalah berbeza; 2. Periksa status sokongan ciri CANIUSE Ciri; 3. Gunakan dengan betul -webkit-, -moz-, -ms-, -o- dan awalan pengeluar lain; 4. Adalah disyorkan untuk menggunakan autoprefixer untuk menambah awalan secara automatik; 5. Pasang postcss dan konfigurasi penyemak imbas untuk menentukan penyemak imbas sasaran; 6. Secara automatik mengendalikan keserasian semasa pembinaan; 7. Ciri -ciri pengesanan moden boleh digunakan untuk projek lama; 8. Tidak perlu meneruskan konsistensi semua pelayar,

Membuat bentuk tersuai dengan laluan klip CSS Membuat bentuk tersuai dengan laluan klip CSS Jul 09, 2025 am 01:29 AM

Gunakan atribut clip-path CSS untuk menanam unsur-unsur ke dalam bentuk tersuai, seperti segitiga, takik bulat, poligon, dan lain-lain, tanpa bergantung pada gambar atau SVG. Kelebihannya termasuk: 1. Menyokong pelbagai bentuk asas seperti Circle, Ellipse, Polygon, dan lain -lain; 2. Pelarasan responsif dan boleh disesuaikan dengan terminal mudah alih; 3. Mudah untuk animasi, dan boleh digabungkan dengan hover atau javascript untuk mencapai kesan dinamik; 4. Ia tidak menjejaskan aliran susun atur, dan hanya tanaman kawasan paparan. Penggunaan umum adalah seperti laluan klip bulat: bulatan (50pxatcenter) dan triangle clip-path: polygon (50%0%, 100 0%, 0 0%). Notis

Apakah perbezaan antara paparan: inline, paparan: blok, dan paparan: blok sebaris? Apakah perbezaan antara paparan: inline, paparan: blok, dan paparan: blok sebaris? Jul 11, 2025 am 03:25 AM

Themaindifferencesbetweendisplay: inline, block, andinline-blockinhtml/cssarelayoutbehavior, spaceusage, andstylingcontrol.1.inlineelementsflowwithtext, notstartonNewlines, abaikanwidth/height, andonyapplylylylylylinddding/

Gaya yang dikunjungi pautan berbeza dengan CSS Gaya yang dikunjungi pautan berbeza dengan CSS Jul 11, 2025 am 03:26 AM

Menetapkan gaya pautan yang telah anda lawati dapat meningkatkan pengalaman pengguna, terutama di laman web yang berintensifkan kandungan untuk membantu pengguna menavigasi lebih baik. 1. Gunakan CSS: Kelas pseudo yang dilawati untuk menentukan gaya pautan yang dikunjungi, seperti perubahan warna; 2. Perhatikan bahawa penyemak imbas hanya membenarkan pengubahsuaian beberapa atribut disebabkan oleh sekatan privasi; 3. Pemilihan warna harus diselaraskan dengan gaya keseluruhan untuk mengelakkan ketangkasan; 4. Terminal mudah alih mungkin tidak memaparkan kesan ini, dan disyorkan untuk menggabungkannya dengan arahan visual lain seperti logo tambahan ikon.

Bagaimana untuk membuat imej responsif menggunakan CSS? Bagaimana untuk membuat imej responsif menggunakan CSS? Jul 15, 2025 am 01:10 AM

Untuk membuat imej responsif menggunakan CSS, ia boleh dicapai terutamanya melalui kaedah berikut: 1. Gunakan maksimum lebar: 100% dan ketinggian: auto untuk membolehkan imej menyesuaikan diri dengan lebar kontena sambil mengekalkan perkadaran; 2. Gunakan atribut SRCSET dan saiz HTML dengan bijak memuatkan sumber imej yang disesuaikan dengan skrin yang berbeza; 3. Gunakan objek-sesuai dan kedudukan objek untuk mengawal penanaman imej dan paparan fokus. Bersama -sama, kaedah ini memastikan bahawa imej dibentangkan dengan jelas dan indah pada peranti yang berbeza.

Unit CSS Demystifying: PX, EM, REM, VW, VH Perbandingan Unit CSS Demystifying: PX, EM, REM, VW, VH Perbandingan Jul 08, 2025 am 02:16 AM

Pilihan unit CSS bergantung kepada keperluan reka bentuk dan keperluan responsif. 1.PX digunakan untuk saiz tetap, sesuai untuk kawalan yang tepat tetapi kekurangan keanjalan; 2.EM adalah unit relatif, yang mudah disebabkan oleh pengaruh unsur induk, sementara REM lebih stabil berdasarkan unsur akar dan sesuai untuk skala global; 3.VW/VH didasarkan pada saiz viewport, sesuai untuk reka bentuk yang responsif, tetapi perhatian harus dibayar kepada prestasi di bawah skrin yang melampau; 4. Apabila memilih, ia harus ditentukan berdasarkan sama ada pelarasan responsif, hubungan hierarki elemen dan ketergantungan viewport. Penggunaan yang munasabah boleh meningkatkan fleksibiliti dan penyelenggaraan susun atur.

Apakah ketidakkonsistenan penyemak imbas CSS biasa? Apakah ketidakkonsistenan penyemak imbas CSS biasa? Jul 26, 2025 am 07:04 AM

Penyemak imbas yang berbeza mempunyai perbezaan dalam parsing CSS, mengakibatkan kesan paparan yang tidak konsisten, terutamanya termasuk perbezaan gaya lalai, kaedah pengiraan model kotak, flexbox dan tahap sokongan susun atur grid, dan tingkah laku yang tidak konsisten bagi atribut CSS tertentu. 1. Pemprosesan gaya lalai tidak konsisten. Penyelesaiannya adalah menggunakan cssreset atau normalisasi.css untuk menyatukan gaya awal; 2. Kaedah pengiraan model kotak versi lama IE adalah berbeza. Adalah disyorkan untuk menggunakan kotak-kotak: kotak sempadan dengan cara yang bersatu; 3. Flexbox dan grid melakukan secara berbeza dalam kes kelebihan atau dalam versi lama. Lebih banyak ujian dan gunakan autoprefixer; 4. Beberapa tingkah laku atribut CSS tidak konsisten. CANIUSE mesti dirujuk dan diturunkan.

See all articles