Iterator.prototype.flatMap accepts primitive string results

Ouverte Adaptée aux débutants
#65,370 0 commentaires 0 réactions 0 personnes assignées Voir sur GitHub

Les mainteneurs répondent en général sous 1 jour

Personne n'a encore pris cette issue.

Évaluation

Difficulté
2/5
Temps estimé
1-3 heures
Accessibilité débutants
84/100
Type d'issue
Bug
Clarté
Clairement spécifiée
Activité
Active
Stack technique
typescript

Piste de recherche

Commencez par lib.es2025.iterator.d.ts et comparez le type de retour du callback de flatMap à la contrainte d’objet utilisée par Iterator.concat. L’issue fournit une reproduction stricte en TypeScript et un changement de type attendu ; exécutez la commande tsc fournie pour vérifier que les chaînes primitives sont rejetées, tandis que les tableaux, les objets itérateurs et les chaînes encapsulées restent acceptés.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Description

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

Langage dominant
Go
Étoiles
112k
Forks
15.4k
Merge moyen
3 j 2 h
PR mergées (30 j)
149

Préparer son environnement

Ouvrir dans Codespaces

Lance le conteneur de développement du projet dans votre navigateur, avec votre propre compte GitHub.

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Autres issues de microsoft/TypeScript

Toutes les issues de microsoft/TypeScript

Issues similaires

Plus d'issues Go

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.