型別系統和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中文網其他相關文章!