TypeScript在哪里找到其变量声明?

问题描述

tsc编译器始终愉快地编译console.log("foo")。变量console在哪里声明?即使我的lib中的所有tsconfig.json关闭,编译器也接受该程序。那么console被假定为通用的吗?总是声明其他哪些变量?更笼统地说,我如何找出存在的其他声明以及它们来自何处? (我可以找到的唯一调试标志是--extendedDiagnostics,但似乎几乎没有用。)

解决方法

TypeScript随一组lib.*.d.ts声明文件一起分发,这些声明文件描述了各种JavaScript运行时提供的标准库API。

console在其中进行了描述。

该语言根据--target选项确定哪些文件适用,并自动将它们包括在编译上下文中。

例如"target": "es5"将使编译器在编译上下文中包含lib.es5.d.ts

您可以使用--lib选项显式配置应引用哪些内置声明文件。

例如"lib": ["es2015","dom","dom.iterable"]

如果您使用IDE的导航功能(例如Visual Studio Code中的“转到定义”),将导航到控制台装饰,从而可以看到装饰的位置。

其他各种声明文件,例如各种@types软件包提供的文件,也可能贡献了可能重叠的描述JavaScript运行时API的声明。这实际上是一个好习惯,因为它允许程序包描述它们提供的其他功能。

例如@types/node包含这样的修饰。

由第三方包装声明时,这些附加的全局声明文件的包含由--types选项控制,而不是--lib选项。

例如"types": ["node"]

这些类型的包含不受--target选项的影响。