WebStorm - Mongoose NPM包掩盖了自动完成的承诺

时间:2018-01-08 22:27:18

标签: mongoose npm webstorm

我遇到了一个奇怪的问题。

在WebStorm中,使用设置为ECMAScript 6的JavaScript,如果我安装了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。

1 个答案:

答案 0 :(得分:1)

猫鼬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库中的类型将其下载。