为什么打字稿不抱怨某些未定义的变量
Why does typescript not complain about certain undefined variables
我有以下例子:
class Uncle {
constructor(public name : string) { }
talk() {
return "Hello my name is " + name;
}
}
let p : Uncle = new Uncle("Jo");
console.log(p.talk());
对于某些变量名,typescript(现在是版本 2.1.4)将不会抱怨它们没有在你的程序中定义(在方法讨论中,没有使用名称。)。 name
就是其中之一。
如果我将变量重命名为 firstName
,编译器会正确地抱怨...
error TS2663: Cannot find name 'firstName'. Did you mean the instance member 'this.firstName'?
同样适用于例如window,这显然是假定存在的。
我的问题是:
- 假定存在哪些变量名称,为什么?
- 是否可以更改该行为(例如,在某些 linter 中,您可以说明您希望哪些变量全局可用)?
它不会抱怨 name
的原因是全局命名空间中有一个名为 name 的变量。
在开发者工具中打开控制台并输入 name
并按回车,您将收到:""
.
更多资源:
所有全局变量无需定义即可使用。
为了删除您可以删除的所有全局定义,例如在您的 tsconfig.json
中,将 "libs"
选项设置为空数组。这将删除 all 全局变量。
我有以下例子:
class Uncle {
constructor(public name : string) { }
talk() {
return "Hello my name is " + name;
}
}
let p : Uncle = new Uncle("Jo");
console.log(p.talk());
对于某些变量名,typescript(现在是版本 2.1.4)将不会抱怨它们没有在你的程序中定义(在方法讨论中,没有使用名称。)。 name
就是其中之一。
如果我将变量重命名为 firstName
,编译器会正确地抱怨...
error TS2663: Cannot find name 'firstName'. Did you mean the instance member 'this.firstName'?
同样适用于例如window,这显然是假定存在的。
我的问题是:
- 假定存在哪些变量名称,为什么?
- 是否可以更改该行为(例如,在某些 linter 中,您可以说明您希望哪些变量全局可用)?
它不会抱怨 name
的原因是全局命名空间中有一个名为 name 的变量。
在开发者工具中打开控制台并输入 name
并按回车,您将收到:""
.
更多资源:
所有全局变量无需定义即可使用。
为了删除您可以删除的所有全局定义,例如在您的 tsconfig.json
中,将 "libs"
选项设置为空数组。这将删除 all 全局变量。