首頁 > web前端 > js教程 > 主體

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

Barbara Streisand
發布: 2024-10-26 22:04:03
原創
825 人瀏覽過

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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!