javascript - *.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 中)?
解决方案
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 的缓存版本,并且只是指向那里而不是项目中本地安装的版本。
推荐阅读
- java - hibernate PropertyAccessException:使用@ManyToMany 时访问字段时出错
- laravel - Laravel 混合,在 npm 运行生产期间无法找到混合文件:/css/xxxxx.css
- mysql - 在mysql中选择限制结果
- javascript - 反应映射意外行为
- c++ - Qt 连接新信号槽语法失败
- uiimagepickercontroller - 无法获取文件名 Uning UIImagePickerController
- c - 使用 for 循环在 C 中反转字符串(句子)时出错(将其分配给另一个字符串。)
- typescript - Sequelize.js:Model.build 返回一个空白对象
- asp.net-core - 使用类的方法而不在启动时注入?
- css - 定制器中的附加 CSS 和编辑 style.css 文件有什么区别?