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

Mot*_*tti 6 node.js typescript

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

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

declare const name: never;
Run Code Online (Sandbox Code Playgroud)

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

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

Seb*_*ald 8

这似乎是一个非常古老的浏览器行为.参考MDN两者name并且lengthwindow对象的属性.

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

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

  • 请小心,因为您现在可能会不小心尝试覆盖全局变量。你可以使用 `var` 而不是 `declare var`,类型检查器会让你分配给它们。 (2认同)