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>
Avec cette déclaration, le code d'origine fonctionnera sans erreurs :
<code class="typescript">if (exampleArr.includes(e.key)) {} // okay</code>
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>
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!