ホームページ  >  記事  >  ウェブフロントエンド  >  質問の形式と記事の焦点を考慮した、いくつかのタイトルのオプションを次に示します。 短くて集中的: * TypeScript が許可された Array.includes() での引数の入力について文句を言うのはなぜですか

質問の形式と記事の焦点を考慮した、いくつかのタイトルのオプションを次に示します。 短くて集中的: * TypeScript が許可された Array.includes() での引数の入力について文句を言うのはなぜですか

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-10-27 11:19:30350ブラウズ

Here are a few title options, keeping in mind the question format and the article's focus:

Short & Focused:

* Why Does TypeScript Complain About Argument Typing in Array.includes() with AllowedChars?
* TypeScript Type Safety: How Does Array.includes()

Array.prototype.includes(searchElement) 引数の型指定と配列要素の互換性

TypeScript では、配列を含む配列操作に対して厳密な型指定ルールが適用されます。 .prototype.includes() メソッド。このメソッドは、検索要素を配列要素と比較して、包含を決定します。ただし、検索要素が配列要素の型と一致するように厳密に型指定する必要があるため、疑問が生じることがあります。

問題の説明

ユーザーが文字を表すデータ型AllowedCharsを定義しました。 「x」、「y」、「z」。配列 exampleArr はこのタイプを使用して作成されました。ただし、Array.prototype.includes() メソッドを使用して、キーボード イベントのキー押下が配列内にあるかどうかを確認しようとすると、TypeScript コンパイラは、引数の型 'string' をAllowedChars 型に割り当てることができないというエラーを出しました。

引数の型付けが配列要素の型に関連付けられているのはなぜですか?

Array.prototype.includes() の引数は、配列要素と比較される検索要素です。 TypeScript は、次の理由により、この引数が配列要素の型と一致することを期待します。

  • タイプ セーフティ: 厳密な型指定を強制することで、正しい型の要素のみが比較されるようになります。
  • パフォーマンスの最適化: TypeScript は既知の型に基づいて比較を最適化し、検索プロセスをより効率的にします。

解決オプション

この型指定の問題に対処するには、いくつかのアプローチがあります。

  • 型アサーション: 型アサーションを if (exampleArr.includes(e. key asAllowedChars)) {} は型チェックを無視し、検索要素が有効であると想定します。ただし、このアプローチは潜在的なキャスト エラーにつながる可能性があるため推奨されません。
  • 宣言のマージ: Array.prototype.includes() のスーパータイプを許可するようにグローバル TypeScript 宣言を変更するのは複雑です。方法。これには、条件付き型を使用してスーパータイプ制約をエミュレートすることが含まれます。
  • 配列型の拡張: exampleArr を読み取り専用 string[] に変更すると、型が拡張されて文字列入力が可能になります。これにより、文字列検索要素を配列要素と安全に比較できるようになります。 Array.prototype.includes() を使用する前に readonly string[] にキャストすると、同じ結果が得られます。

以上が質問の形式と記事の焦点を考慮した、いくつかのタイトルのオプションを次に示します。 短くて集中的: * TypeScript が許可された Array.includes() での引数の入力について文句を言うのはなぜですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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