Iterator.prototype.flatMap accepts primitive string results

Aberta Para iniciantes
#65,370 0 comentários 0 reações 0 responsáveis Ver no GitHub

Mantenedores costumam responder em até 1 dia

Ninguém assumiu esta issue ainda.

Avaliação

Dificuldade
2/5
Tempo estimado
1-3 horas
Facilidade para iniciantes
84/100
Tipo de issue
Bug
Clareza
Claramente especificada
Status de atividade
Ativa
Stack de tecnologia
typescript

Direção de pesquisa

Comece com lib.es2025.iterator.d.ts e compare o tipo de retorno do callback de flatMap com a restrição de objeto usada por Iterator.concat. O issue fornece uma reprodução estrita em TypeScript e uma alteração de tipo esperada; execute o comando tsc fornecido para verificar que strings primitivas são rejeitadas, enquanto arrays, objetos iteradores e strings encapsuladas continuam sendo aceitos.

Escrita pelo modelo de indexação a partir do texto da issue.

Descrição

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

Linguagem predominante
Go
Estrelas
112k
Forks
15.4k
Merge médio
3d 2h
PRs com merge (30d)
149

Preparar o ambiente

Abrir no Codespaces

Inicia o contêiner de desenvolvimento do projeto no navegador, com a sua própria conta do GitHub.

Primeiros passos

  1. Leia a issue inteira e depois o guia de contribuição do projeto.
  2. Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
  3. Faça um fork do repositório e trabalhe em uma branch.
  4. Abra um pull request que referencie o número da issue.

Mais de microsoft/TypeScript

Todas as issues de microsoft/TypeScript

Issues semelhantes

Mais issues de Go

Receba novas issues na sua caixa de entrada

Um resumo curto de issues do GitHub para quem está começando.