TypeScript 在哪里找到它的变量声明?

Posted

技术标签:

【中文标题】TypeScript 在哪里找到它的变量声明?【英文标题】:Where does TypeScript find its variable declarations? 【发布时间】:2021-01-18 23:14:52 【问题描述】:

tsc 编译器总是很高兴地编译console.log("foo")。变量console 声明在哪里?即使在我的tsconfig.json 中关闭了所有libs,编译器也会接受这个程序。那么console 是否被认为是通用的?总是声明其他哪些变量?更一般地说,我怎样才能找出存在哪些其他声明,以及它们来自哪里? (我能找到的唯一调试标志是--extendedDiagnostics,但它似乎几乎没用。)

【问题讨论】:

当您在 IDE 中执行 Command + Click 或 Ctrl + 单击 console.log 时,它应该会将您带到声明它们的文件 :) 【参考方案1】:

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包含这样的装饰。

当由 3rd 方包声明时,这些额外的全局声明文件的包含由 --types 选项控制,而不是 --lib 选项。

例如"types": ["node"]

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

【讨论】:

谢谢 - 虽然我的困惑是即使我设置了"lib": [],编译器似乎仍然知道console,这让我假设console 也被声明在其他地方。我的期望是在设置"lib": []时,根本不应该有预先声明的变量,但是console的存在违反了这一点。 是的。没有限制其他声明文件不会定义标准库类型的某些子集。这实际上是一种好的行为,因为它允许包描述其运行时的附加功能。例如@types/node 包含这样的装饰。添加到由第 3 方包声明的 when 的全局类型由 "types" 选项控制,而不是 "lib" 你是对的——在我的例子中,console@types/node 中声明在C:\Users\james\AppData\Local\Microsoft\TypeScript\4.0 中。我不明白编译器的类型搜索路径是什么——但这是一个未来的问题。谢谢! 这其实是一个叫做Automatic Type Aquisition的功能,可以禁用

以上是关于TypeScript 在哪里找到它的变量声明?的主要内容,如果未能解决你的问题,请参考以下文章

今天第一次接触到typescript,看了第一个知识点就是变量的声明,来回忆回忆,做做笔记

LayaBox---TypeScript---变量声明

TypeScript系列教程07变量声明

TypeScript的变量声明

TypeScript系列教程07变量声明

TypeScript(05): 变量声明