ここでは、いくつかのタイトルのオプションを質問形式で示します。 タイプセーフティに焦点を当てる: * 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

Type System と Array.prototype.includes()

TypeScript は型安全性を強制するため、Array などの関数を使用するときにエラーが発生する可能性があります。プロトタイプ.includes()。この関数は、searchElement 引数が配列要素と同じ型であることを期待します。ただし、特定のシナリオでは、入力が異なる型を持つ可能性があり、型引数がなぜ制約されるのかという疑問が生じます。

TypeScript ライブラリは、searchElement パラメーターが配列要素と一致するように厳密に型指定されることを前提としています。この仮定はほとんどの場合に当てはまりますが、スーパータイプを扱う場合には問題が生じる可能性があります。このような場合、スーパータイプを許可するために標準の TypeScript 宣言をオーバーライドする必要がある場合があります。

Array.prototype.includes() のオーバーライド

1 つの方法は、ローカルでオーバーライドすることです。宣言のマージによる標準ライブラリ宣言。 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 の型を読み取り専用 string[] に拡張することです。

<code class="typescript">const stringArr: readonly string[] = exampleArr; // no assertion

if (stringArr.includes(e.key)) {} // okay</code>
ログイン後にコピー

読み取り専用 string[] に拡張すると、入力を妥協することなく別の型を持つことができます。タイプセーフティ。対照的に、string[] への拡張は、TypeScript による配列共分散の不適切な処理により、安全でない可能性があります。

以上がここでは、いくつかのタイトルのオプションを質問形式で示します。 タイプセーフティに焦点を当てる: * TypeScript が Array.prototype.includes() の型引数を制限するのはなぜですか? * Array.prototype.includes() の使用方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!