首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >vscode Intellisense NodeJs

vscode Intellisense NodeJs
EN

Stack Overflow用户
提问于 2017-01-27 04:21:27
回答 4查看 7.8K关注 0票数 11

在vscode中,开发人员能够悬停在代码中变量和对象的方法和属性上,它将向您展示有关它们的信息。不幸的是,一旦我们将代码传递给另一个文件中的一个模块(因为javascript是静态输入的),就会丢失它。是否有可能显式地键入传递给模块的参数?或者是某种源地图?我遇到问题的一个例子是:

app.js

代码语言:javascript
复制
var express = require('express')
var app = express()

var routes = './routes/route.js'

route.js

代码语言:javascript
复制
module.exports = function(app) {
    // Hovering over app doesn't show the intellisense like it does in app.js
}

更新

我一直在寻找答案,但没有找到答案。这是我所得到的最接近使其工作的方法,但出于某种原因,编辑器不想应用该类型。见下文:

route.js

代码语言:javascript
复制
import Express from 'Express'

/**
* @param {Express} app
*/        
module.exports = function(app) {
    // Hovering over app doesn't show the intellisense like it does in app.js
}
EN

回答 4

Stack Overflow用户

发布于 2017-02-14 22:49:16

...since javascript是静态输入的。

JavaScript没有静态输入。它是动态输入的。

是否有可能显式地键入传递给模块的参数?

是。使用TypeScript。它提供可选静态类型

解释

在下面的屏幕截图中,Intellisense确实可以工作。它表明appany类型的。这是我们对JavaScript所能做的最好的,因为JavaScript是动态类型的。在编译时,app确实可以是any类型。动态类型意味着只在运行时检查类型。

票数 6
EN

Stack Overflow用户

发布于 2017-02-14 11:34:39

第一个问题是VS代码无法确定app实际上是Express类型。这就是为什么您的第二个版本的route.js似乎是有意义的。

问题是,在JSDoc中不支持对象类型,正如VS代码所解释的那样。

VS代码内部使用JavaScript语言服务,作为在这里显示。问题是,JavaScript语言服务本身实际上是TypeScript (参见同一页面上对它的链接)。

这将以下列方式回答您的问题:

首先,VS代码支持的JSDoc注释与那些由TypeScript支持相同。在TypeScript文档中,这是不受支持的:

代码语言:javascript
复制
/**
 * @param {object} param1 - Listing properties on an object type does not work
 * @param {string} param1.name
 */
function fn7(param1) {}

这就是你第二次尝试失败的原因。

但这是得到支持的:

代码语言:javascript
复制
/** @type {{a: string, b: number}} */
var var12; 

所以如果你真的很有冒险精神,你可以用这种方式添加最需要的属性。我不认为这是值得的努力。

最后一种选择是实际使用TypeScript。它不需要对代码产生很大的影响,并且会给出您需要的类型信息。

所以我创建了一个route.ts,它看起来像这样:

代码语言:javascript
复制
import 'node';
import { Express } from 'Express';

module.exports = function(app: Express) {
    // Your code with IntelliSense goes here
}

这保留了类型信息和IntelliSense,并且工作起来很有魅力。折衷之处在于,您还需要一个构建步骤(您可以在任务运行程序中或使用tsc --watch透明地处理这个步骤)。

然后,您可以获得所需的IntelliSense,而无需绑定到ES6 (默认TypeScript配置使用ES5),也不必强制使用比您想要的更多的TypeScript。如果您愿意的话,其余的代码都可以是普通的JavaScript。

综上所述,你的三种选择是:

  1. 没有IntelliSense。
  2. 键入显式列出所需属性或函数的注释。
  3. 使用TypeScript类型注释。

编辑:我应该补充一下,我还为Node和TypeScript安装了TypeScript类型导入。我不确定它们是否是明确需要的,但是如果您想要这样做的话,您可能应该安装它们。

用这个:

代码语言:javascript
复制
npm install @types/node
npm install @types/express
票数 3
EN

Stack Overflow用户

发布于 2017-03-02 18:49:58

VS代码中有一个非常有用的特性,它支持合成默认导入。它将自动从JSDoc或类型定义文件中导入键入信息。

我已经链接了一个博客帖子,它向您展示了如何进行安装,并提供了一个实用的示例

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41886918

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档