为什么TypeScript允许编译?

时间:2016-11-19 09:31:19

标签: typescript

有两种简单的TypeScript代码。

a.ts

console.log(name);

b.ts

console.log(a);

a.ts可以编译,但编译器抱怨b.ts

$ ./node_modules/.bin/tsc a.ts
$ ./node_modules/.bin/tsc b.ts
b.ts(1,13): error TS2304: Cannot find name 'a'.

为什么a.ts可以成功? 我真的很困惑。

我正在使用v2.0.10

$ ./node_modules/.bin/tsc --version
Version 2.0.10

最佳,

1 个答案:

答案 0 :(得分:1)

如果您在Chrome开发者工具中执行以下代码

for(var b in window) { 
  if(window.hasOwnProperty(b)) console.log(b); 
}

您会看到一个属性" name" (对于Web浏览器,全局范围是窗口)。

因此TypeScript编译器允许您引用' name' (否则将是未声明的变量)因为它知道它存在于窗口(全局范围)上。虽然没有财产' a'在全局范围内,所以编译器正在完成它的工作并告诉你它。