ホームページ >ウェブフロントエンド >jsチュートリアル >異なる型で `Array.prototype.includes()` を使用すると TypeScript がエラーをスローするのはなぜですか?

異なる型で `Array.prototype.includes()` を使用すると TypeScript がエラーをスローするのはなぜですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-10-27 02:31:03402ブラウズ

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 パラメータの型は string ですが、exampleArr 要素はAllowedChars 型です。この不一致には、TypeScript 型システムの期待をオーバーライドするための型アサーションまたは型の拡張が必要です。

この問題を解決する最も簡単で最も推奨されるアプローチは、exampleArr の型を string[] のより広い型に拡張することです。または、許可された文字のみを含むように searchElement パラメータを絞り込みます。これらの変更により型の互換性が確保され、型に関連する潜在的なエラーや不一致が防止されます。

以上が異なる型で `Array.prototype.includes()` を使用すると TypeScript がエラーをスローするのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。