Les boucles en TypeScript et les types qu'elles vous donnent

Les boucles en TypeScript

Boucles en TypeScript : for...of, for...in, forEach et types | We.Inc

Découvrez le type que TypeScript donne à la variable de boucle dans for, for...of, for...in et forEach, pourquoi obj[key] échoue dans for...in, et comment parcourir objets et Maps sans risque.

TypeScript a les mêmes boucles que JavaScript : for, for...of, for...in, while, do...while et la méthode de tableau forEach. Ce qu'il ajoute, c'est un type pour chaque variable de boucle. for...of donne le type des éléments, for...in donne toujours des clés string, et forEach donne le type des éléments à son callback, qui ne peut pas s'arrêter en cours de route.

Le type de la variable de boucle

Choisissez un scénario pour voir le code, le type que le compilateur attribue à la variable de boucle, et ce que la boucle affiche à l'exécution. Deux d'entre eux sont volontairement des erreurs de compilation, car ce sont les boucles sur lesquelles on bute le plus souvent en TypeScript.

Questions fréquentes

Pourquoi la clé est-elle une string dans une boucle for...in ?

for...in parcourt les clés string énumérables, y compris celles héritées via la chaîne de prototypes, et TypeScript ne peut pas exclure la présence de clés supplémentaires sur un objet à l'exécution. Typer la clé en keyof T serait une promesse que le langage ne peut pas tenir, donc elle reste string.

Comment corriger "Element implicitly has an 'any' type because expression of type 'string' can't be used to index" ?

Passez à Object.entries(obj) pour obtenir clés et valeurs ensemble, ou castez les clés une seule fois : for (const k of Object.keys(obj) as (keyof typeof obj)[]). Ne castez que si vous savez que l'objet n'a pas de clés supplémentaires.

Peut-on sortir d'un forEach en TypeScript ?

Non. Comme en JavaScript, forEach ne s'arrête que si le callback lève une erreur. Utilisez for...of avec break, ou some() et find(), qui s'arrêtent à la première correspondance.

for...of fonctionne-t-il sur une Map en TypeScript ?

Oui, avec une cible ES2015 ou ultérieure. Chaque tour donne une paire [key, value] typée d'après les génériques de la Map. Pour les cibles plus anciennes, activez downlevelIteration.

Quel type a le compteur d'une boucle for classique ?

let i = 0 infère number, et a[i] donne le type des éléments. Avec noUncheckedIndexedAccess activé, a[i] devient le type des éléments ou undefined, ce qui est plus strict mais plus proche de la réalité.

Les boucles viennent de JavaScript, les types sont la nouveauté

Parcourir des objets sans erreurs

Affiner le type dans une boucle

Boucles et code asynchrone

Attendre une par une avec for...of

Chaque requête attend la précédente. Le tableau de résultats est typé d'après le type de retour de la fonction.

Les lancer ensemble avec Promise.all

map démarre toutes les requêtes à la fois et Promise.all les attend toutes. L'ordre des résultats suit l'ordre des ids.

for...of sur un tableau

s: number

Le type des éléments de number[] passe directement dans la variable de boucle.

for...in sur un objet

k: string

La clé est une simple chaîne, donc l'utiliser pour indexer un objet typé échoue en mode strict.

Object.entries

name: string, price: number

Object.entries renvoie ici [string, number][], donc les deux moitiés de la paire sont typées.

Clés en keyof

k: "tea" | "cake"

Un cast unique indique au compilateur que les clés sont exactement celles déclarées. Sûr seulement si l'objet ne peut pas porter de clés supplémentaires.

for...in sur un tableau

i: string

Les index de tableau arrivent sous forme de chaînes dans for...in, donc en affecter un à une variable number échoue.

for...of sur une Map

item: string, qty: number

Déstructurer l'entrée donne les deux types génériques, dans l'ordre où les entrées ont été ajoutées pour la première fois.

forEach sur un tuple

x: string | number

forEach voit un tuple comme un tableau de l'union de ses types d'éléments, donc affinez avec typeof.

Liste as const

as const conserve les valeurs littérales, donc la variable de boucle est une union que vous pouvez traiter de façon exhaustive dans un switch.

Quel type reçoit la variable de boucle ?

Choisir un scénario de boucle

Type :

Sortie

Erreur de compilation de tsc

Commencer gratuitement · Sans carte bancaire

Voir aussi: Guides

Produit

Pour qui

Fonctionnalités

Ressources

Entreprise

Plan du site