*.d.ts 文件从何而来?

dis*_*ame 2 javascript node.js npm typescript visual-studio-code

我正在学习 node.js 并使用 Visual Studio Code。在我的项目中,我安装了 underscore.js。所以我的 node_modules 文件夹看起来像这样:

node_modules/
??? underscore
    ??? LICENSE
    ??? package.json
    ??? README.md
    ??? underscore.js
    ??? underscore-min.js
    ??? underscore-min.js.map
Run Code Online (Sandbox Code Playgroud)

这是我的 index.js 文件:

const _ = require('underscore');
console.log(_.contains([1, 2, 3, 4], 2));
Run Code Online (Sandbox Code Playgroud)

现在,当我对containsindex.js 中的函数执行 Ctrl+Click 时,它在 Visual Studio Code 中的意思是“转到定义”,它不会显示包含在 .js 中的函数node_modules/underscore.js。相反,它打开文件/home/user/.cache/typescript/2.9/node_modules/@types/underscore/index.d.ts

这是一个打字稿文件,而不是 javascript,我不明白它来自哪里?我不认为它是从 javascript 文件自动生成的,因为 js 文件中不存在注释。我执行的时候有没有下载到我的电脑上npm install underscore?是否可以转到 js 文件中的函数定义而不是这个(在 VSCode 中)?

wil*_*bbs 5

d.ts 文件来自这个存储库:https : //github.com/DefinitelyTyped/DefinitelyTyped。它们发布在@types/package-name 下,并且应该作为 devDependency 安装在您正在使用的文件夹中。

也就是说,在您的项目目录中,您将npm install --save underscore, 然后运行npm install --save-dev @types/underscore以访问其他无类型包的类型定义。

它指向 TypeScript 缓存的原因与 Node 模块解析有关。Node 在树上查找每个 node_modules 文件夹,直到找到匹配项(更多信息:https ://medium.freecodecamp.org/requiring-modules-in-node-js-everything-you-need-to-know-e7fbd119be8 ) . 基本上,Node 和 TypeScript 环顾四周,发现了@types/underscore 的缓存版本,并指向那里而不是项目中本地安装的版本。