Maison > interface Web > js tutoriel > le corps du texte

Voici quelques options de titre, toutes sous forme de question : Focus sur la sécurité des types : * Pourquoi TypeScript restreint-il les arguments de type Array.prototype.includes() ? * Comment puis-je utiliser Array.prototype.includes()

Barbara Streisand
Libérer: 2024-10-26 22:04:03
original
825 Les gens l'ont consulté

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 et Array.prototype.includes()

TypeScript applique la sécurité des types, ce qui peut entraîner des erreurs lors de l'utilisation de fonctions telles que Array. prototype.includes(). Cette fonction s'attend à ce que l'argument searchElement ait le même type que les éléments du tableau. Cependant, dans certains scénarios, l'entrée peut avoir un type différent, ce qui soulève la question de savoir pourquoi l'argument de type est contraint.

La bibliothèque TypeScript suppose que le paramètre searchElement est strictement typé pour correspondre aux éléments du tableau. Bien que cette hypothèse soit vraie dans la plupart des cas, elle peut s’avérer problématique lorsqu’il s’agit de supertypes. Dans de tels cas, la déclaration TypeScript standard devra peut-être être remplacée pour autoriser les supertypes.

Remplacer Array.prototype.includes()

Une approche consiste à remplacer localement le déclaration de bibliothèque standard via la fusion de déclarations. TypeScript manque de contraintes de supertype, donc des types conditionnels sont utilisés pour les émuler :

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

Avec cette déclaration, le code d'origine fonctionnera sans erreurs :

<code class="typescript">if (exampleArr.includes(e.key)) {} // okay</code>
Copier après la connexion

Type de tableau élargi

Une solution plus simple consiste à élargir le type de exampleArr à une chaîne en lecture seule[] :

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

if (stringArr.includes(e.key)) {} // okay</code>
Copier après la connexion

L'élargissement à une chaîne en lecture seule[] permet à l'entrée d'avoir un type différent sans compromettre tapez la sécurité. En revanche, l'élargissement à string[] est potentiellement dangereux en raison du traitement inapproprié par TypeScript de la covariance des tableaux.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!