Microsoft/TypeScript

Alias Binding incorrectly propagates through properties on ephemeral import

Open

#43,891 opened on 2021年4月29日

GitHub で見る
 (0 comments) (0 reactions) (0 assignees)TypeScript (48,455 stars) (6,726 forks)batch import
BugDomain: BinderHelp Wanted

説明

Bug Report

This is related to the [closed] issue #41628. We have some code that requires JSON (with "resolveJsonModule": true set in our tsconfig.json) and immediately accesses a string field (package version) on the returned JSON object, assigning it to a var/let variable. This produces the following error:

Cannot assign to 'version' because it is not a variable. ts(2539)

🔎 Search Terms

require json cannot assign let alias

🕗 Version & Regression Information

  • This changed between versions 4.0 and 4.1

⏯ Playground Link

Playground link with relevant code

💻 Code

let version = require('./package.json').version;
version += "-debug";

🙁 Actual behavior

TypeScript reports the following error:

Cannot assign to 'version' because it is not a variable.

🙂 Expected behavior

We expect no error in this case. The version property on the object returned by the require function should not be considered an alias, but a simple string.

One workaround is, of course, to use the //ts-ignore hammer. Another is to do something like the following:

const pkg = require('./package.json');
let version = pkg.version;
version += "-debug";

コントリビューターガイド

Alias Binding incorrectly propagates through properties on ephemeral import · Microsoft/TypeScript#43891 | Good First Issue