Heim  >  Artikel  >  Web-Frontend  >  Hier sind einige Titeloptionen, alle im Fragenformat: Fokus auf Typensicherheit: * Warum schränkt TypeScript die Typargumente von Array.prototype.includes() ein? * Wie kann ich Array.prototype.includes() verwenden

Hier sind einige Titeloptionen, alle im Fragenformat: Fokus auf Typensicherheit: * Warum schränkt TypeScript die Typargumente von Array.prototype.includes() ein? * Wie kann ich Array.prototype.includes() verwenden

Barbara Streisand
Barbara StreisandOriginal
2024-10-26 22:04:03826Durchsuche

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

Typsystem und Array.prototype.includes()

TypeScript erzwingt die Typsicherheit, was bei der Verwendung von Funktionen wie Array zu Fehlern führen kann. Prototyp.includes(). Diese Funktion erwartet, dass das searchElement-Argument denselben Typ wie die Array-Elemente hat. In bestimmten Szenarien kann die Eingabe jedoch einen anderen Typ haben, was die Frage aufwirft, warum das Typargument eingeschränkt ist.

Die TypeScript-Bibliothek geht davon aus, dass der Parameter „searchElement“ streng typisiert ist, um mit den Array-Elementen übereinzustimmen. Während diese Annahme in den meisten Fällen zutrifft, kann sie beim Umgang mit Supertypen problematisch sein. In solchen Fällen muss möglicherweise die Standard-TypeScript-Deklaration überschrieben werden, um Supertypen zuzulassen.

Array.prototype.includes() überschreiben

Ein Ansatz besteht darin, das lokal zu überschreiben Standardbibliotheksdeklaration durch Deklarationszusammenführung. TypeScript verfügt nicht über Supertyp-Einschränkungen, daher werden bedingte Typen verwendet, um diese zu emulieren:

<code class="typescript">declare global {
  interface Array<T> {
    includes<U extends (T extends U ? unknown : never)>(
      searchElement: U,
      fromIndex?: number
    ): boolean;
  }
}</code>

Mit dieser Deklaration funktioniert der Originalcode ohne Fehler:

<code class="typescript">if (exampleArr.includes(e.key)) {} // okay</code>

Erweiternder Array-Typ

Eine einfachere Lösung besteht darin, den Typ von exampleArr auf schreibgeschützten String[] zu erweitern:

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

if (stringArr.includes(e.key)) {} // okay</code>

Durch die Erweiterung auf schreibgeschützten String[] kann die Eingabe ohne Kompromisse einen anderen Typ haben Typensicherheit. Im Gegensatz dazu ist die Erweiterung auf string[] möglicherweise unsicher, da TypeScript die Array-Kovarianz nicht sinnvoll behandelt.

Das obige ist der detaillierte Inhalt vonHier sind einige Titeloptionen, alle im Fragenformat: Fokus auf Typensicherheit: * Warum schränkt TypeScript die Typargumente von Array.prototype.includes() ein? * Wie kann ich Array.prototype.includes() verwenden. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn