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
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!