Heim > Web-Frontend > js-Tutorial > Hauptteil

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
Freigeben: 2024-10-26 22:04:03
Original
825 Leute haben es durchsucht

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>
Nach dem Login kopieren

Mit dieser Deklaration funktioniert der Originalcode ohne Fehler:

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

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>
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!