Skip to content

using transform throws when a for body binding shadows the for head binding #61714

Open
@JLHwung

Description

@JLHwung

🔎 Search Terms

explicit resource management, using, await using, loop initializer, Symbol.dispose, Symbol.asyncDispose, iteration, shadows

🕗 Version & Regression Information

⏯ Playground Link

https://www.typescriptlang.org/play/?ts=5.9.0-dev.20250516#code/MYGwhgzhAEBiD29oG8C+BYAUAM3gJ2gAoBXCASwDsBzaXJebaAbQF0BKFLaaYeCiAC61E0ALzQKAUwDucRITYBuLKiA

💻 Code

class Foo {}
for (using foo of []) {
  const foo = new Foo();
}

🙁 Actual behavior

The transformed output throws "redeclaration of const foo "

🙂 Expected behavior

The transformed output should not throw.

Additional information about the issue

Babel is also affected by this issue: babel/babel#17318. We plan to wrap the for body within a new block when it contains shadowed binding.

Metadata

Metadata

Assignees

Labels

BugA bug in TypeScriptFix AvailableA PR has been opened for this issueHelp WantedYou can do this

Type

No type

Projects

No projects

Relationships

None yet

Development

No branches or pull requests

Issue actions