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()
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!