Microsoft/TypeScript

Alias Binding incorrectly propagates through properties on ephemeral import

オープン

#43,891 opened on 2021/04/29

 (0 件のコメント) (0 件のリアクション) (0 人の担当者)TypeScript (13,395 件のフォーク)batch import
BugDomain: BinderHelp Wanted

Repository metrics

Stars
 (108,860 個のスター)
PR merge metrics
 (PR metrics pending)

説明

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";

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