vscode智能感知NodeJs

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

app.js

var express = require('express')
var app = express()

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

route.js

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

更新

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

route.js

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
}

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

问题在于JSDoc不支持对象类型,正如VS Code所解释的那样。

VS Code内部使用JavaScript语言服务,如下所示。 问题是,JavaScript语言服务本身实际上是TypeScript(请参阅同一页面上的链接)。

这以下面的方式回答你的问题:

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

/**
 * @param {object} param1 - Listing properties on an object type does not work
 * @param {string} param1.name
 */
function fn7(param1) {}

这就是为什么你的第二次尝试没有奏效。

但是这是支持的:

/** @type {{a: string, b: number}} */
var var12; 

所以如果你的确非常冒险,那么你可以通过这种方式添加最需要的属性。 我不认为这是值得的。

最后的选择是实际使用TypeScript。 它不需要对您的代码产生巨大影响,并会为您提供所需的类型信息。

所以我创建了一个route.ts

import 'node';
import { Express } from 'Express';

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

这保留了类型信息和智能感知,并且像魅力一样工作。 权衡是你需要更多的构建步骤(你可以在任务运行器中透明地处理或使用tsc --watch )。

然后,再次获得所需的智能感知,而不必绑定到ES6(默认的TypeScript配置使用ES5),并且不会被迫使用任何更多的TypeScript。 如果你喜欢它,所有其他的代码都可以是普通的JavaScript。

回顾一下,你的三个选择是:

  • 没有智能感知。
  • 键入明确列出所需属性或功能的注释。
  • 使用TypeScript类型注释。
  • 编辑 :我应该补充说我还为Node和Express安装了TypeScript类型的导入。 我不确定他们是否明确需要,但如果你想要走这条路线,你应该安装它们。

    用这个:

    npm install @types/node
    npm install @types/express
    

    ...因为JavaScript是静态类型。

    JavaScript不是静态类型的。 它是动态输入的。

    有没有什么办法可以让我显式地输入传递给模块的参数?

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

    说明

    在以下屏幕截图中,Intellisense确实有效。 它显示该appany类型的。 这是我们可以用JavaScript完成的最好的工作,因为JavaScript是动态输入的。 在编译时, app的确可以是any类型的。 动态类型意味着只在运行时检查类型。

    在这里输入图像描述


    VS Code中有一个非常有用的功能,可以启用合成默认导入。 它会自动从JSDoc或类型定义文件中导入输入信息。

    我已经链接了一篇博客文章,向您展示如何进行设置以及其功能的实际示例

    链接地址: http://www.djcxy.com/p/94863.html

    上一篇: vscode Intellisense NodeJs

    下一篇: Combining gradient text with strikethrough / line