首頁  >  文章  >  web前端  >  以下是一些標題選項,全部採用問題格式: 關注類型安全: * 為什麼 TypeScript 限制 Array.prototype.includes() 類型參數? * 如何使用 Array.prototype.includes()

以下是一些標題選項,全部採用問題格式: 關注類型安全: * 為什麼 TypeScript 限制 Array.prototype.includes() 類型參數? * 如何使用 Array.prototype.includes()

Barbara Streisand
Barbara Streisand原創
2024-10-26 22:04:03826瀏覽

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

型別系統和Array.prototype.includes()

TypeScript 強制執行型別安全,這可能會在使用Array 等函數時導致錯誤。原型.includes()。此函數期望 searchElement 參數與陣列元素具有相同的類型。但是,在某些情況下,輸入可以具有不同的類型,這就提出了為什麼類型參數受到約束的問題。

TypeScript 函式庫假定 searchElement 參數的型別嚴格符合陣列元素。雖然這個假設在大多數情況下都是正確的,但在處理超類型時可能會出現問題。在這種情況下,可能需要重寫標準 TypeScript 聲明以允許超類型。

重寫 Array.prototype.includes()

一種方法是本地重寫透過聲明合併來聲明標準庫。 TypeScript 缺乏超類型約束,因此使用條件類型來模擬它們:

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

使用此聲明,原始程式碼將不會出現錯誤:

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

加寬數組類型

更簡單的解決方案是將exampleArr 的類型擴展為readonly string[]:

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

if (stringArr.includes(e.key)) {} // okay</code>
擴展為readonly string[] 允許輸入具有不同的類型而不是而不>

擴展為readonly string[]影響類型安全。相較之下,由於 TypeScript 對數組協方差的處理不健全,擴展到 string[] 可能是不安全的。

以上是以下是一些標題選項,全部採用問題格式: 關注類型安全: * 為什麼 TypeScript 限制 Array.prototype.includes() 類型參數? * 如何使用 Array.prototype.includes()的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn