首页 > 解决方案 > *.d.ts 文件来自哪里?

问题描述

我正在学习 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

这是我的 index.js 文件:

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

现在,当我contains在 index.js 中的函数上执行 Ctrl+Click 时,它在 Visual Studio Code 中的意思是“转到定义”,它不显示 contains function inside 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 中)?

标签: javascriptnode.jstypescriptnpmvisual-studio-code

解决方案


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 的缓存版本,并且只是指向那里而不是项目中本地安装的版本。


推荐阅读