TS1107
Skok poza wywołanie zwrotne
Jump target cannot cross function boundary.Własne słowa kompilatora. Nietłumaczone — to ten ciąg, który wkleiłeś w wyszukiwarkę.
`break` i `continue` sterują pętlą, w której je zapisano. Wywołanie zwrotne to inna funkcja i ta pętla nie należy do niej.
Odtworzenie
const ids = [1, 2, 3] const kept: number[] = [] for (const id of ids) { ids.forEach(() => { if (id > 2) continue }) kept.push(id) }
Build potwierdza, że to emituje dokładnie ten kod.
Dlaczego kompilator tak mówi
`forEach` przyjmuje funkcję, a tę funkcję wywołuje `forEach`, nie pętla. `continue` oznacza skok do następnej iteracji otaczającej pętli, a wnętrza wywołania zwrotnego nie otacza nic poza wywołaniem. Kompilator odrzuca to już przy parsowaniu, zanim pozna jakiekolwiek typy, bo żaden układ typów nie nadałby temu skokowi sensu.
Naprawy
- 01
const ids = [1, 2, 3] const kept: number[] = [] for (const id of ids) { if (id > 2) continue kept.push(id) }
Użyj prawdziwej pętli. `for…of` daje `continue` cel skoku i czyta się jako iteracja, którą i tak już była.
- 02
const ids = [1, 2, 3] const kept = ids.filter((id) => id <= 2)
Albo przestań sterować i opisz wynik. Większość `continue` wewnątrz wywołania zwrotnego to filtr, którego nie zapisano jako filtr.
Wniosek
Wewnątrz wywołania zwrotnego jedynym wyjściem jest `return`. Jeśli chciałeś pominąć albo przerwać, właściwą odpowiedzią jest zwykle metoda tablicy, która znaczy „pomiń” lub „przerwij”.

