我遇到了一个奇怪的问题。
在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。
答案 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库中的类型将其下载。