WebStorm - Mongoose NPM 包掩盖了自动完成的承诺
WebStorm - Mongoose NPM package masks Promise for auto-complete
我遇到了一个奇怪的问题。
在 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。
Mongoose 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
文件。导航到文件浏览器中的文件,然后右键单击 select "Mark as plain text".
您应该使用 Mongoose 的 TypeScript 定义,而不是节点模块。这可以通过 npm install @types/mongoose
安装,也可以在 WebStorm 设置对话框的 JavaScript 库中将其作为一种类型下载。
我遇到了一个奇怪的问题。
在 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。
Mongoose 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
文件。导航到文件浏览器中的文件,然后右键单击 select "Mark as plain text".
您应该使用 Mongoose 的 TypeScript 定义,而不是节点模块。这可以通过 npm install @types/mongoose
安装,也可以在 WebStorm 设置对话框的 JavaScript 库中将其作为一种类型下载。