为什么在typescript中声明了一个全局`name`变量,我可以避免使用它吗?

时间:2017-04-24 10:56:00

标签: node.js typescript

一位朋友重构了一些代码,并将名为name的变量的定义从函数的顶级范围移到then的正文中。此变量在后续then中使用,导致 ReferenceError ,因为name不在范围内。

我们无法理解代码如何通过编译,直到我们看到typescript/lib.d.ts有以下减速:

declare const name: never;

长话短说,我有两个问题。

  1. 为什么name(以及length和许多其他全局变量)默认添加到打字稿?
  2. 从周围的代码来看,这似乎意味着要在浏览器中运行的项目,我们是一个node.js项目。我们可以选择不再为我们添加这些声明吗?

1 个答案:

答案 0 :(得分:6)

这似乎是一个非常古老的浏览器行为。引用MDN namelength都是window对象的属性。

为了摆脱所有特定于DOM的声明,您可以相应地在lib中设置tsconfig属性。你可以看到this page上的所有选项。看一下--lib标志。

告诉TypeScript你的代码在Node.JS上运行的选项会很好。但它似乎尚未实施:https://github.com/Microsoft/TypeScript/issues/9466