为什么打字稿不会抱怨某些未定义的变量

flq*_*flq 7 javascript typescript tsc

我有以下示例:

class Uncle {
  constructor(public name : string) { }

  talk() {
    return "Hello my name is " + name;
  }
}

let p : Uncle = new Uncle("Jo");
console.log(p.talk());
Run Code Online (Sandbox Code Playgroud)

对于某些变量名称,typescript(现在版本2.1.4)不会抱怨它们没有在您的程序中定义(在方法talk中,名称正在使用而没有这个.).name就是其中之一.

如果我将变量重命名为,比方说,firstName编译器正确地抱怨......

错误TS2663:找不到名称'firstName'.你的意思是实例成员'this.firstName'吗?

同样适用于例如窗口,显然假设存在.

我的问题是:

  • 假设存在哪些变量名称,为什么?
  • 是否可以改变这种行为(例如,在某些短语中,您可以说明您期望全局可用的变量)?

Nit*_*mer 5

它不会抱怨的原因name是全局命名空间中有一个名为 name 的变量。
在开发人员工具中打开控制台并编写name并按回车键,您将收到:"".

更多资源:

所有全局变量都可以在不定义的情况下使用。

为了删除所有全局定义,您可以,例如在您的 中tsconfig.json,将"libs"选项设置为空数组。这将删除所有全局变量。