【问题标题】:Why Typesript compiler change a const into a var?为什么 Typescript 编译器将 const 更改为条形?
【发布时间】:2022-11-08 19:20:16
【问题描述】:

在 consts.ts 我有

const s1: string = 'test';

我用 tsc consts.ts 编译它,然后在 consts.js 中它变成了

var s1 = 'test';

为什么?

【问题讨论】:

  • 您能否将您的 tsconfig 内容添加到问题中?
  • @Oro 嗨,这是一个全新的 typescript 安装,带有 npm install typescript --save-dev。
  • 您是否运行了用于生成 tsconfg 文件的 init 命令?
  • @Oro 不,我只遵循typescriptlang.org/download 的 TS 安装指南中的内容
  • 我在下面留下了关于如何为您的项目创建 tsconfig 文件的答案,如果有问题请告诉我

标签: typescript constants


【解决方案1】:

TypeScript 编译为 ECMAScript 3 代码,除非您另外指定 [doc link],并且 ECMAScript 直到版本 6 才引入 const

【讨论】:

  • @ruakh TY 这个好点。我收回之前说过的话。 medium.com/coding-at-dawn/…)。
  • 谢谢(你的)信息。我的 tsconfig.json 中有“target”:“es2016”,它仍然将 const 编译为 var。
  • @Eddi 有点感觉 TS 不这样做。我也刚刚设定了目标,但在我的 dist 中没有看到任何 conststackoverflow.com/questions/52236950/…。最终,我很高兴,因为 TS 在编译时强制执行。您无法生成带有 TS 抱怨的约束的输出(可以吗?)。您正在查看错误的图层
  • 这是我第一次尝试打字稿,将常量更改为变量对我来说没有意义...
【解决方案2】:

因此,您的项目似乎没有任何打字稿配置。你必须跑

npx tsc --init

然后您将能够在那里更改编译器选项的目标值

{
  "compilerOptions": {
    "target": "es2017"
  }
}

【讨论】:

  • 谢谢(你的)信息。我想知道为什么他们的官方安装指南中没有提到这一点。无论如何,我这样做了,它生成了一个 tsconfig.json 但我的 const 仍然被编译成一个 var ...
  • 我已经更新了我的答案,请查看。您可以通过更改目标值来更改该行为。您可以在 doc typescriptlang.org/tsconfig#target 中查看允许的值
  • 即使使用 "target": "es2017" 它仍然会将 const 更改为 var。
  • @Eddi听起来您正在一个看不到您的 tsconfig.json 文件的地方启动 TS 编译器。 ES3 target turns const into varES2017 preserves const 是绝对正确的。如果你没有看到,那么你可能实际上并没有改变目标。
  • @Oro 哦,是的,你是对的。我尝试 tsc -t ES2017 consts.ts 并且它有效。配置文件没有效果,我已经用 npx tsc --init 创建了它,我可以看到文件在那里。
【解决方案3】:

target tsconfig.json 中的配置值不相关。即使target 设置为es2021,TypeScript 编译器也会将let/const 编译为var

这是因为需要合并声明。如果某些变量使用let/const 定义,则无法定义新的同名变量。所以 TypeScript 编译器需要var 来定义变量。

见:https://github.com/microsoft/TypeScript/issues/16256#issuecomment-306244683

【讨论】:

    猜你喜欢
    • 2016-04-19
    • 1970-01-01
    • 1970-01-01
    • 2019-02-01
    • 1970-01-01
    • 2019-04-20
    • 2017-01-16
    • 2020-04-21
    • 1970-01-01
    相关资源
    最近更新 更多