为什么在打字稿中声明一个全局的`name`variables,我可以避免使用它吗?

一位朋友重构了一些代码,并将名为name的variables的定义从函数的顶级作用域移动到了then的正文中。 这个variables被用在随后的那个引起一个ReferenceError,因为name不在范围内。

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

 declare const name: never; 

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

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

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

为了摆脱所有特定于DOM的声明,您可以相应地在您的tsconfig设置lib属性。 你不能看到这个页面上的所有选项。 看看--lib标志。

一个告诉TypeScript你的代码在Node.JS上运行的选项会很好。 但它似乎还没有实现: https : //github.com/Microsoft/TypeScript/issues/9466