首頁 >web前端 >js教程 >為什麼 TypeScript 在使用不同類型的 Array.prototype.includes() 時會拋出錯誤?

為什麼 TypeScript 在使用不同類型的 Array.prototype.includes() 時會拋出錯誤?

Susan Sarandon
Susan Sarandon原創
2024-10-27 02:31:03397瀏覽

Why Does TypeScript Throw an Error When Using `Array.prototype.includes()` with Different Types?

為什麼Array.prototype.includes() 需要數組元素的匹配類型

Array.prototype.includes() 方法旨在確定如果數組包含特定元素。為了確保結果準確可靠,searchElement 參數必須與陣列元素的類型相符。這種類型安全性可以防止錯誤的比較並保持陣列資料的完整性。

考慮以下程式碼片段:

<code class="js">type AllowedChars = 'x' | 'y' | 'z';
const exampleArr: AllowedChars[] = ['x', 'y', 'z'];

function checkKey(e: KeyboardEvent) { 
    if (exampleArr.includes(e.key)) { 
        // ...
    } 
}</code>

TypeScript 編譯器標記一個錯誤,表示 e.key參數與 exampleArr 元素的AllowedChars 類型不符。這個錯誤是因為includes()方法假設searchElement與陣列元素具有相同的型別。

這可能看起來矛盾,因為Array.prototype.includes()傳回一個布林值而不是一個賦值,如下所示錯誤提示。然而,TypeScript 的類型系統在這裡起著至關重要的作用。

在陣列中包含一個元素表示該元素的類型與陣列的元素一致。但是,在提供的範例中,e.key 參數的類型是字串,而 exampleArr 元素是AllowedChars 類型。這種不匹配需要類型斷言或類型擴充來覆蓋 TypeScript 類型系統的期望。

解決此問題的最簡單且最推薦的方法是將 exampleArr 的類型擴展為更廣泛的 string[] 類型,或將 searchElement 參數縮小為僅包含允許的字元。這些修改確保類型相容性,防止任何潛在的與類型相關的錯誤或不一致。

以上是為什麼 TypeScript 在使用不同類型的 Array.prototype.includes() 時會拋出錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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