我遇到了一个奇怪的问题。
在 WebStorm 中,使用 JavaScript 设置为 ECMAScript 6,如果我安装了 mongoose
NPM 模块,并将project-name/node_modules
作为库(这是默认行为(,那么mongoose
模块似乎用部分模块屏蔽了默认Promise
自动完成。
这个部分识别new Promise()
,但不自动完成任何Promise.
,并告诉我像Promise.all()
这样的东西是未导入的。
有没有办法告诉 WebStorm 赋予一件事(内置定义(优先于node_modules
这样它就不会让他们覆盖这些核心东西?
奇怪的是,如果我按Ctrl+B
去Promise
的定义,它仍然会把我带到它通常读取的lib.es6.promise.d.ts
文件,并且没有提到mongoose
定义 Promise。
猫鼬 4.x 破坏了内置类型 Promise
的全局定义。
在/nodes_module/mongoose/lib/index.js
中,您将找到以下定义:
/**
* Returns the current ES6-style promise constructor. In Mongoose 4.x,
* equivalent to `mongoose.Promise.ES6`, but will change once we get rid
* of the `.ES6` bit.
*
* @method Promise
* @api public
*/
此 JSDoc 样式声明将覆盖 ES6 内置 Promise 类型的全局定义。
您可以在 Webstorm 中从智能感知中排除index.js
文件。导航到文件浏览中的文件,然后右键单击并选择"标记为纯文本"。
您应该使用 Mongoose 的 TypeScript 定义,而不是节点模块。这可以通过npm install @types/mongoose
安装,或者将其下载为 WebStorm 设置对话框中的 JavaScript 库中的一种类型。