当我打算写name
时,我已经注意到我编写的稿件中的错误被编译器接受了someObject.name
。
作为测试,我尝试编译仅包含console.log(name)
的单个文件,并且tsc接受它。 Typescript是否定义了一些全局符号?
我使用的是Typescript 2.8.1并且没有安装全局软件包,除了NPM本身和Typescript。
答案 0 :(得分:3)
是的,有一个(默认)用于EcmaScript标准的库,比如ES2016。这个lib叫做“lib.es2016.full.d.ts”(https://github.com/Microsoft/TypeScript/blob/master/lib/lib.es2016.full.d.ts),它包含“name”声明。
在您的编辑器中(如果它不仅仅是记事本,而是Visual Studio Code),您可以从上下文菜单中选择“转到定义”。或者您可以将鼠标悬停在“名称”上方,看看“名称”实际上是哪种类型(它是“从不”和常量)。
这样做是为了限制对全局(Window)名称属性的访问: https://github.com/Microsoft/TypeScript/issues/1351 https://github.com/Microsoft/TypeScript/issues/9850