Rumah  >  Artikel  >  hujung hadapan web  >  Berikut ialah beberapa pilihan tajuk, semuanya dalam format soalan: Fokus pada Jenis Keselamatan: * Mengapa TypeScript Mengehadkan Argumen Jenis Array.prototype.includes()? * Bagaimana Saya Boleh Menggunakan Array.prototype.includes()

Berikut ialah beberapa pilihan tajuk, semuanya dalam format soalan: Fokus pada Jenis Keselamatan: * Mengapa TypeScript Mengehadkan Argumen Jenis Array.prototype.includes()? * Bagaimana Saya Boleh Menggunakan Array.prototype.includes()

Barbara Streisand
Barbara Streisandasal
2024-10-26 22:04:03826semak imbas

Here are a few title options, all in the question format:

Focus on Type Safety:

* Why Does TypeScript Restrict Array.prototype.includes() Type Arguments? 
* How Can I Use Array.prototype.includes() With Supertypes in TypeScript?
* TypeScript Type Safety

Sistem Jenis dan Array.prototype.includes()

TypeScript menguatkuasakan keselamatan jenis, yang boleh membawa kepada ralat apabila menggunakan fungsi seperti Array. prototype.includes(). Fungsi ini menjangkakan hujah searchElement mempunyai jenis yang sama seperti elemen tatasusunan. Walau bagaimanapun, dalam senario tertentu, input boleh mempunyai jenis yang berbeza, yang menimbulkan persoalan mengapa hujah jenis dikekang.

Pustaka TypeScript menganggap bahawa parameter searchElement ditaip dengan ketat untuk memadankan elemen tatasusunan. Walaupun andaian ini berlaku dalam kebanyakan kes, ia boleh menjadi masalah apabila berurusan dengan supertype. Dalam kes sedemikian, pengisytiharan TypeScript standard mungkin perlu ditindih untuk membenarkan supertype.

Overriding Array.prototype.includes()

Satu pendekatan adalah untuk mengatasi secara setempat pengisytiharan perpustakaan standard melalui penggabungan pengisytiharan. TypeScript tidak mempunyai kekangan supertype, jadi jenis bersyarat digunakan untuk mencontohinya:

<code class="typescript">declare global {
  interface Array<T> {
    includes<U extends (T extends U ? unknown : never)>(
      searchElement: U,
      fromIndex?: number
    ): boolean;
  }
}</code>

Dengan pengisytiharan ini, kod asal akan berfungsi tanpa ralat:

<code class="typescript">if (exampleArr.includes(e.key)) {} // okay</code>

Jenis Tatasusunan Melebar

Penyelesaian yang lebih mudah ialah meluaskan jenis exampleArr kepada rentetan baca sahaja[]:

<code class="typescript">const stringArr: readonly string[] = exampleArr; // no assertion

if (stringArr.includes(e.key)) {} // okay</code>

Pelebaran kepada rentetan baca sahaja[] membenarkan input mempunyai jenis yang berbeza tanpa menjejaskan jenis keselamatan. Sebaliknya, pelebaran kepada rentetan[] berkemungkinan tidak selamat disebabkan oleh rawatan TypeScript yang tidak mantap terhadap kovarians tatasusunan.

Atas ialah kandungan terperinci Berikut ialah beberapa pilihan tajuk, semuanya dalam format soalan: Fokus pada Jenis Keselamatan: * Mengapa TypeScript Mengehadkan Argumen Jenis Array.prototype.includes()? * Bagaimana Saya Boleh Menggunakan Array.prototype.includes(). Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

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