TS1107
Saltar fuera de una retrollamada
Jump target cannot cross function boundary.Las palabras del propio compilador. Sin traducir — es la cadena que pegaste en el buscador.
`break` y `continue` dirigen el bucle en el que están escritos. Una retrollamada es otra función, y ese bucle no es suyo.
Reproducción
const ids = [1, 2, 3] const kept: number[] = [] for (const id of ids) { ids.forEach(() => { if (id > 2) continue }) kept.push(id) }
La compilación afirma que esto emite exactamente este código.
Por qué lo dice el compilador
`forEach` recibe una función, y a esa función la llama `forEach`, no el bucle. `continue` nombra un salto a la siguiente iteración de un bucle envolvente, y desde dentro de la retrollamada no la envuelve nada salvo una llamada. El compilador lo rechaza al analizar la sintaxis, antes de conocer ningún tipo, porque ninguna disposición de tipos daría sentido al salto.
Arreglos
- 01
const ids = [1, 2, 3] const kept: number[] = [] for (const id of ids) { if (id > 2) continue kept.push(id) }
Usa un bucle de verdad. `for…of` le da a `continue` un destino, y se lee como la iteración que ya era.
- 02
const ids = [1, 2, 3] const kept = ids.filter((id) => id <= 2)
O deja de dirigir y describe el resultado. Casi todo `continue` dentro de una retrollamada es un filtro que no se ha escrito como tal.
Conclusión
Dentro de una retrollamada la única salida es `return`. Si querías saltar o parar, el método de array que significa «saltar» o «parar» suele ser la respuesta real.

