Bucles en TypeScript y los tipos que te dan

Bucles en TypeScript

Bucles en TypeScript: for...of, for...in, forEach y tipos | We.Inc

Mira qué tipo da TypeScript a la variable del bucle en for, for...of, for...in y forEach, por qué obj[key] falla dentro de for...in y cómo recorrer objetos y Maps de forma segura.

TypeScript tiene los mismos bucles que JavaScript: for, for...of, for...in, while, do...while y el método de array forEach. Lo que añade es un tipo para cada variable del bucle. for...of da el tipo del elemento, for...in siempre da claves string, y forEach pasa el tipo del elemento a su callback, que no puede salir antes de tiempo.

El tipo de la variable del bucle

Elige un escenario para ver el código, el tipo que el compilador asigna a la variable del bucle y lo que imprime el bucle al ejecutarse. Dos de ellos son errores de compilación a propósito, porque son los bucles en los que más se atasca la gente con TypeScript.

Preguntas frecuentes

¿Por qué la clave es un string en un bucle for...in?

for...in recorre las claves string enumerables, incluidas las heredadas a través de la cadena de prototipos, y TypeScript no puede descartar que un objeto tenga claves extra en tiempo de ejecución. Tipar la clave como keyof T sería una promesa que el lenguaje no puede cumplir, así que se queda en string.

¿Cómo soluciono "Element implicitly has an 'any' type because expression of type 'string' can't be used to index"?

Cambia a Object.entries(obj) para obtener claves y valores juntos, o convierte las claves una sola vez: for (const k of Object.keys(obj) as (keyof typeof obj)[]). Haz la conversión solo cuando sepas que el objeto no tiene claves extra.

¿Puedo salir de un forEach en TypeScript?

No. Igual que en JavaScript, forEach solo se detiene si el callback lanza un error. Usa for...of con break, o some() y find(), que se detienen en la primera coincidencia.

¿Funciona for...of con un Map en TypeScript?

Sí, con un objetivo ES2015 o posterior. Cada vuelta da un par [key, value] tipado a partir de los genéricos del Map. Para objetivos más antiguos, activa downlevelIteration.

¿Qué tipo tiene el contador de un bucle for clásico?

let i = 0 infiere number, y a[i] da el tipo del elemento. Con noUncheckedIndexedAccess activado, a[i] pasa a ser el tipo del elemento o undefined, que es más estricto pero más fiel a la realidad.

Los bucles son JavaScript; los tipos son lo nuevo

Recorrer objetos sin errores

Acotar dentro de un bucle

Bucles y código asíncrono

Espera de una en una con for...of

Cada petición espera a la anterior. El array de resultados se tipa a partir del tipo de retorno de la función.

Ejecútalas a la vez con Promise.all

map lanza todas las peticiones a la vez y Promise.all espera a que terminen todas. El orden de los resultados coincide con el orden de los ids.

for...of sobre array

s: number

El tipo del elemento de number[] pasa directamente a la variable del bucle.

for...in sobre objeto

k: string

La clave es un string simple, así que usarla para indexar un objeto tipado falla en modo strict.

Object.entries

name: string, price: number

Aquí Object.entries devuelve [string, number][], así que las dos mitades del par están tipadas.

Claves como keyof

k: "tea" | "cake"

Una conversión puntual le dice al compilador que las claves son exactamente las declaradas. Solo es seguro cuando el objeto no puede llevar claves extra.

for...in sobre array

i: string

En for...in los índices del array llegan como strings, así que asignar uno a una variable number falla.

for...of sobre Map

item: string, qty: number

Desestructurar la entrada da ambos tipos genéricos, en el orden en que se añadieron las entradas por primera vez.

forEach sobre tupla

x: string | number

forEach ve una tupla como un array de la unión de sus tipos de elemento, así que acota con typeof.

Lista as const

as const conserva los valores literales, así que la variable del bucle es una unión que puedes recorrer con un switch exhaustivo.

¿Qué tipo recibe la variable del bucle?

Elige un escenario de bucle

Tipo:

Salida

Error de compilación de tsc

Empieza gratis · Sin tarjeta de crédito

Relacionado: Guías

Producto

Para quién es

Funciones

Recursos

Empresa

Mapa del sitio