Iterator.prototype.flatMap accepts primitive string results

Offen Anfängerfreundlich
#65,370 0 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Maintainer antworten meist innerhalb von 1 Tag

Dieses Issue hat noch niemand übernommen.

Bewertung

Schwierigkeit
2/5
Geschätzter Aufwand
1-3 Stunden
Anfängerfreundlichkeit
84/100
Issue-Typ
Bug
Klarheit
Klar beschrieben
Aktivitätsstatus
Aktiv
Tech-Stack
typescript

Rechercherichtung

Beginne mit lib.es2025.iterator.d.ts und vergleiche den Rückgabetyp des flatMap-Callbacks mit der Objektbedingung, die von Iterator.concat verwendet wird. Das Issue enthält eine strikte TypeScript-Reproduktion und eine erwartete Typänderung; führe den angegebenen tsc-Befehl aus, um zu prüfen, dass primitive Strings abgelehnt werden, während Arrays, Iteratorobjekte und String-Objekte weiterhin akzeptiert werden.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Beschreibung

Compilation target

ES5 (default).

Library

es2025

Missing / Incorrect Definition

lib.es2025.iterator.d.ts accepts a primitive string as the mapper's return value because a string satisfies Iterable<U>. ECMAScript rejects that value when the iterator is consumed.

TypeScript 7.1.0-dev.20261106.1 accepts the sample below. Node 26.13.0 throws TypeError: Iterator.prototype.flatMap called on non-object when toArray() consumes the iterator. TypeScript should reject the callback's return type.

Copy the code under Sample Code into repro.ts in an empty directory. Run the following commands there.

npx --yes [email protected] tsc --noEmit --strict --lib es2025 repro.ts
node repro.ts

Intersect the callback's existing return union with object. This matches the object constraint used by Iterator.concat and preserves arrays, iterator objects, and boxed strings.

-        flatMap<U>(callback: (value: T, index: number) => Iterator<U, unknown, undefined> | Iterable<U, unknown, undefined>): IteratorObject<U, undefined, unknown>;
+        flatMap<U>(callback: (value: T, index: number) => (Iterator<U, unknown, undefined> | Iterable<U, unknown, undefined>) & object): IteratorObject<U, undefined, unknown>;
Sample Code
Iterator.from([1]).flatMap(() => "ab").toArray();
Documentation Link

ECMAScript Iterator.prototype.flatMap

Vorherrschende Sprache
Go
Sterne
112k
Forks
15.4k
Ø Merge
3 T. 2 Std.
Gemergte PRs (30 T.)
149

Entwicklungsumgebung

In Codespaces öffnen

Startet den Dev-Container des Projekts im Browser, mit Ihrem eigenen GitHub-Konto.

Erste Schritte

  1. Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
  3. Forken Sie das Repository und arbeiten Sie in einem Branch.
  4. Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.

Mehr aus microsoft/TypeScript

Alle Issues in microsoft/TypeScript

Ähnliche Issues

Weitere Issues zu Go

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.