Jadual Kandungan
Jenis Kesatuan: Mengendalikan pelbagai kemungkinan
Contoh praktikal: pengendalian status
Jenis Persimpangan: Menggabungkan Jenis
Kes Penggunaan Dunia Sebenar: Mixin atau Objek Konfigurasi
Taip never : mewakili keadaan yang tidak dapat dijangkau
1. Fungsi yang tidak pernah kembali
2. Memeriksa kesatuan dalam kesatuan
Bagaimana never berfungsi dalam sistem jenis
Menggabungkan semuanya
Ringkasan
Rumah pembangunan bahagian belakang tutorial php Petunjuk Jenis Lanjutan: Jenis Kesatuan, Jenis Persimpangan, dan `Never`

Petunjuk Jenis Lanjutan: Jenis Kesatuan, Jenis Persimpangan, dan `Never`

Jul 29, 2025 am 12:48 AM
PHP Syntax

Jenis Kesatuan (A | B) Benarkan nilai menjadi salah satu daripada beberapa jenis, membolehkan pengendalian fleksibel pelbagai kemungkinan input. 2. Jenis persimpangan (A & B) menggabungkan pelbagai jenis ke dalam satu yang mesti memenuhi semua ahli, berguna untuk mewujudkan bentuk objek kompleks. 3. Jenis yang tidak pernah mewakili keadaan yang tidak dapat dicapai atau mustahil, yang biasa digunakan dalam pemeriksaan dan fungsi yang tidak pernah kembali. Bersama-sama, ciri-ciri typescript lanjutan ini membolehkan kod yang lebih mantap, mendokumentasikan diri, dan jenis-jenis dengan membuat negara-negara yang tidak sah tidak dapat diwujudkan.

Petunjuk Jenis Lanjutan: Jenis Kesatuan, Jenis Persimpangan, dan `Never`

Apabila bekerja dengan TypeScript, anotasi jenis asas hanyalah permulaan. Untuk menulis kod yang lebih mantap, ekspresif, dan dikekalkan, anda perlu melampaui string , number , atau boolean dan memanfaatkan jenis jenis canggih seperti jenis kesatuan , jenis persimpangan , dan jenis never ditaip. Alat ini memberi anda kawalan halus ke atas bagaimana nilai dan fungsi berkelakuan dalam senario kompleks.

Mari kita memecahkan setiap konsep ini dengan contoh praktikal dan kes penggunaan.


Jenis Kesatuan: Mengendalikan pelbagai kemungkinan

Jenis kesatuan membolehkan nilai menjadi salah satu daripada beberapa jenis. Anda menentukannya menggunakan bar menegak ( | ).

 Biarkan UserId: String | nombor;
userId = "ABC123"; // ✅
userId = 123; // ✅

Ini amat berguna apabila berurusan dengan API, input pengguna, atau data warisan di mana jenis tidak dijamin.

Contoh praktikal: pengendalian status

 fungsi getStatus (status: "memuatkan" | "kejayaan" | "ralat") {
  // ...
}
getStatus ("memuatkan"); // ✅
getstatus ("menunggu"); // ❌ Argumen tidak boleh diberikan

Anda juga boleh menggunakan kesatuan dengan jenis yang kompleks:

 jenis pengguna = {name: string; Umur: Nombor};
jenis admin = {name: string; Kebenaran: String []};

fungsi printInfo (entiti: pengguna | admin) {
  console.log (entity.name); // ✅ 'nama' wujud pada kedua -duanya
  // console.log (entiti.age); // ❌ Ralat: 'umur' bukan pada pentadbir
}

? Petua : Gunakan pengawal jenis untuk menyempitkan jenis kesatuan semasa runtime.

 jika ("umur" dalam entiti) {
  console.log (entiti.age); // sekarang selamat
}

Jenis Persimpangan: Menggabungkan Jenis

Jenis persimpangan menggabungkan pelbagai jenis ke dalam satu. Ia menggunakan & pengendali dan bermaksud "nilai ini mesti memenuhi semua jenis."

 jenis pengguna = {name: string; E -mel: String};
Taipkan timestamp = {createdAt: date; UPDATEDAT: Tarikh};

Taip UserWithTimeStamp = User & Timestamp;

pengguna const: userWithTimeStamp = {
  Nama: "Alice",
  E -mel: "alice@example.com",
  dibuat: tarikh baru (),
  dikemas kini: tarikh baru (),
};

Kes Penggunaan Dunia Sebenar: Mixin atau Objek Konfigurasi

 taip withId = {id: number};
taipkan name = {name: string};
jenis aktif = {isactive: boolean};

Taipkan akaun = WithId & WithName & Active;

akaun const: akaun = {
  ID: 1,
  Nama: "Pengguna Pro",
  isaktif: benar,
};

⚠️ Berhati -hati dengan persimpangan objek yang mempunyai bidang yang bercanggah :

 taip A = {data: string};
taip b = {data: nombor};
jenis C = A & B;

contoh const: c = {
  Data: ??? // Apa ini boleh? Mesti rentetan & nombor → mustahil → `tidak pernah`
};

Yang membawa kita ke ...


Taip never : mewakili keadaan yang tidak dapat dijangkau

Jenis never mewakili nilai yang tidak boleh berlaku . Ia digunakan dalam dua senario utama:

  1. Fungsi yang tidak pernah kembali
  2. Nilai yang tidak dapat wujud kerana jenis penyempitan

1. Fungsi yang tidak pernah kembali

 fungsi pelempar (mesej: rentetan): tidak pernah {
  membuang ralat baru (mesej);
}

Fungsi ini tidak hanya kembali void - ia tidak pernah kembali. Typescript menggunakan never memodelkannya.

2. Memeriksa kesatuan dalam kesatuan

Penggunaan klasik never memastikan semua kes dikendalikan dalam kesatuan:

 jenis mod = "gelap" | "Cahaya" | "Auto";

fungsi getTheMe (mod: mod) {
  suis (mod) {
    kes "gelap":
      kembali "hitam";
    kes "cahaya":
      kembali "putih";
    Kes "Auto":
      Kembali tetingkap.PrefersDark? "Hitam": "Putih";
    Lalai:
      // Sekiranya semua kes dilindungi, `mod` menjadi` tidak pernah` di sini
      const _ExhaustiveCheck: Never = Mode;
      kembali _ExhaustiveCheck;
  }
}

Jika anda kemudian menambah nilai baru ke Mode tetapi lupa untuk mengendalikannya, baris ini akan membuang ralat jenis , membantu anda menangkap logik yang tidak lengkap.

Bagaimana never berfungsi dalam sistem jenis

  • never jenis bawah - ia boleh diberikan kepada mana -mana jenis.
  • Tetapi tiada jenis yang boleh diberikan kepada never (kecuali never sendiri).
  • Nampaknya semasa jenis penyempitan apabila kemungkinan habis.
 fungsi handlevalue (x: string | nombor) {
  jika (typeof x === "string") {
    // x adalah tali
  } else if (typeof x === "nombor") {
    // x adalah nombor
  } else {
    // x adalah `tidak pernah` - tidak ada kemungkinan lain
    const tidak dijangka: tidak = x;
    membuang ralat baru (`nilai yang tidak dijangka: $ {tak terduga}`);
  }
}

Menggabungkan semuanya

Bayangkan membina sistem pengesahan borang:

 jenis kejayaan = {kejayaan: benar; data: string};
jenis kegagalan = {kejayaan: palsu; Ralat: String};
Hasil jenis = Kejayaan & Kegagalan; // tunggu - apa?

// itu tidak masuk akal. Sebaliknya:
Taip ValidationResult = Kejayaan | Kegagalan;

fungsi isvalid (input: string): validationResult {
  jika (input.length> 0) {
    kembali {kejayaan: benar, data: input};
  } else {
    kembali {kejayaan: palsu, ralat: "input kosong"};
  }
}

// Kemudian, mengendalikan hasilnya dengan selamat:
Fungsi ProcessResult (Res: ValidationResult) {
  jika (res.success) {
    console.log ("Data:", res.data); // ✅ Jenis berjaya
  } else {
    console.log ("Ralat:", res.error); // ✅ Jenis adalah kegagalan
  }
}

Di sini, jenis kesatuan membolehkan menaip bersyarat, dan typescript menyempitkan jenis berdasarkan bidang success .


Ringkasan

  • Jenis Kesatuan ( A | B ) : Nilai sama ada A atau B - hebat untuk input fleksibel.
  • Jenis Persimpangan ( A & B ) : Nilai mestilah A dan B - berguna untuk menggabungkan ciri -ciri.
  • never : mewakili keadaan yang mustahil atau tidak dapat dijangkau - penting untuk pemeriksaan dan fungsi kesilapan.

Ciri -ciri jenis canggih ini membantu anda menulis kod yang lebih selamat dengan membuat negara -negara yang tidak sah tidak dapat diwujudkan . Sebaik sahaja anda selesa dengan mereka, jenis anda tidak hanya ditaip-ia menjadi dokumentasi diri dan menguatkuasakan diri .

Pada asasnya, itulah cara anda menilai dari anotasi asas kepada pemodelan jenis yang benar -benar kuat.

Atas ialah kandungan terperinci Petunjuk Jenis Lanjutan: Jenis Kesatuan, Jenis Persimpangan, dan `Never`. 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
1543
276
Pengenalan kepada atribut Php 8: Mengganti Docblocks dengan Metadata Berstruktur Pengenalan kepada atribut Php 8: Mengganti Docblocks dengan Metadata Berstruktur Jul 25, 2025 pm 12:27 PM

Php8attributesTlaceCblockSformetAdataByProvidingType-safe, natielySupportedAnnotations.1.AttributesSaredEdEdusing#[attribute] danCantRetSsses, kaedah, sifat-sifat, dan lain-lain

Statik vs Diri: Membongkar pengikatan statik lewat di PHP Statik vs Diri: Membongkar pengikatan statik lewat di PHP Jul 26, 2025 am 09:50 AM

Apabila kaedah statik dipanggil menggunakan diri dalam warisan, ia sentiasa menunjuk kepada kelas yang mentakrifkan kaedah, dan bukannya kelas yang sebenarnya dipanggil, mengakibatkan ketidakupayaan untuk memanggil kaedah subclass yang ditindas seperti yang diharapkan; Walaupun statik menggunakan pengikatan statik lewat, yang boleh menghuraikan dengan betul kepada kelas yang sebenarnya dipanggil semasa runtime. 1. Diri adalah mengikat awal, menunjuk ke kelas di mana kod itu terletak; 2. Statik adalah mengikat lewat, menunjuk ke kelas panggilan runtime; 3. Gunakan statik untuk melaksanakan kaedah kilang statik dan secara automatik mengembalikan contoh subkelas; 4. Statik menyokong resolusi yang betul sifat -sifat yang diwarisi dalam rantaian kaedah; 5. LSB hanya sesuai untuk kaedah dan atribut statik, bukan untuk pemalar; 6. Statik harus digunakan terlebih dahulu dalam kelas yang boleh diwarisi untuk meningkatkan fleksibiliti dan skalabiliti, yang berada dalam pH moden

Menguasai Pemusnahan Array PHP dan Pengendali Penyebaran Menguasai Pemusnahan Array PHP dan Pengendali Penyebaran Jul 25, 2025 am 04:44 AM

Pengendali dekonstruksi dan pengembangan PHP dapat meningkatkan kebolehbacaan dan fleksibiliti kod melalui sintaks ringkas. 1. Array Deconstruction menyokong mengekstrak nilai dari indeks dan array bersekutu, seperti [$ pertama, $ kedua] = $ warna, yang boleh diberikan secara berasingan; Unsur -unsur boleh dilangkau melalui ruang letak kosong, seperti [, $ ketiga] = $ warna; Dekonstruksi array bersekutu memerlukan => kekunci yang sepadan, seperti ['name' => $ name] = $ pengguna, yang menyokong pembolehubah penamaan semula dan menetapkan nilai lalai untuk menangani kekunci yang hilang. 2. EDVED OPERATOR (...) boleh mengembangkan dan menggabungkan susunan, seperti [... $ warna, 'biru'], yang menyokong gabungan majoriti dan pengaturcaraan array bersekutu, tetapi kunci berikutnya akan menimpa bekas dan tidak menambah.

Adakah sintaks php mudah? Adakah sintaks php mudah? Jul 17, 2025 am 04:12 AM

Ya, phpsyntaxiseasy, terutama sekali-sekala, kerana tidak dapat dipertahankan, integrateswellwithhtml, andrequiresminimalsetup.itssyntaxisstraightforward, membenarkandirectembeddingintohtmlwithtags, menggunakan $ forvariage,

Demystifying PHP Ternary, Null Coalescing, dan Nullsafe Operator Demystifying PHP Ternary, Null Coalescing, dan Nullsafe Operator Jul 25, 2025 pm 04:48 PM

Theternaryoperator(?:)isusedforsimpleif-elselogic,returningoneoftwovaluesbasedonacondition;2.Thenullcoalescingoperator(??)returnstheleftoperandifitisnotnullorundefined,otherwisetherightoperand,makingitidealforsettingdefaultswithoutbeingaffectedbyfals

Memahami fungsi variadik dan argumen yang membongkar php Memahami fungsi variadik dan argumen yang membongkar php Jul 25, 2025 am 04:50 AM

Fungsi pembolehubah dan parameter pembolehubah PHP dilaksanakan melalui pengendali Splat (...). 1. 2. 3. Kedua -duanya boleh digunakan dalam kombinasi, seperti parameter lulus dalam fungsi pembalut; 4. Php8 menyokong parameter yang dinamakan yang sepadan apabila membongkar array bersekutu, dan perlu untuk memastikan nama kunci konsisten dengan nama parameter; 5. Beri perhatian untuk mengelakkan menggunakan pembongkaran untuk data yang tidak dapat diperoleh, mencegah kesilapan maut, dan perhatikan had kuantiti parameter. Ciri -ciri ini meningkatkan fleksibiliti kod dan kebolehbacaan, mengurangkan func_get_args () dan sebagainya

Memanfaatkan Argumen Dinamakan dan Promosi Harta Pembina dalam PHP Moden Memanfaatkan Argumen Dinamakan dan Promosi Harta Pembina dalam PHP Moden Jul 24, 2025 pm 10:28 PM

Php8.0'SnamedargumentsandConstructorPropertyPromotionImproveCodeCodeClarityAndreBeboilerPlate: 1.namedargumentsletyyoupassparametersbyname, enhancingabilityandallowingflexibleorder;

PHP Fungsi Anonymous vs Fungsi Arrow: Sintaks Deep Dive PHP Fungsi Anonymous vs Fungsi Arrow: Sintaks Deep Dive Jul 25, 2025 pm 04:55 PM

Fungsi anak panah sesuai untuk senario dengan ungkapan tunggal, panggilan balik mudah dan kebolehbacaan yang lebih baik; 2. Fungsi tanpa nama sesuai untuk senario dengan logik multi-line, aliran kawalan kompleks, merujuk pembolehubah luaran dan menggunakan penjana hasil; Oleh itu, anda harus memilih mengikut keperluan khusus: Senario mudah mengutamakan fungsi anak panah untuk meningkatkan kesederhanaan kod, sementara senario kompleks menggunakan fungsi tanpa nama untuk mendapatkan sokongan fungsional lengkap.

See all articles