【问题标题】:How to get intellisense for middleware of express in external file in vscode?如何在vscode的外部文件中获取express中间件的智能感知?
【发布时间】:2018-12-08 12:52:46
【问题描述】:

我正在尝试编写 express 的中间件。我把它写在一个文件 test2.js 中

在服务器中,我可以有类似的智能感知:

在该单个文件中,中间件工作正常,但我无法获得 req 和 res

的智能感知

有没有办法获得智能感知?


这是我的服务器test1.js

//test1.js
let http = require("http");
let express = require("express");
let app = express();

let middle = require("./test2.js");
app.use(middle);

app.use(function(req, res, next) {
  next();
});
http.createServer(app).listen(80);

这是我的中间件test2.js

//test2.js
module.exports = function(req, res, next) {
  console.log("middle");
  next();
};

【问题讨论】:

    标签: javascript node.js express visual-studio-code intellisense


    【解决方案1】:

    也许 JSDoc 是一个选项? 您可能需要安装类型定义:npm i @types/express -D (VS Code 中的“自动类型获取”可能会或可能不会自动为您执行此操作)

    /** @type {import("express").RequestHandler} */
    module.exports = function (req, res, next) {
        req. // intellisense works
        next();
    }
    

    https://github.com/Microsoft/TypeScript/wiki/JSDoc-support-in-JavaScript


    你也可以使用自己的 typescript 声明文件:

    myTypes.d.ts

    import Express from "express";
    declare global { 
        type RequestHandler = Express.RequestHandler;
    }
    

    类型通常绑定到模块的范围,但您可以导入任何类型并在全局范围内重新声明它。

    现在 vscode 找到没有“脏”{import("express")}的类型

    myMiddleware.js

    /** @type RequestHandler */
    module.exports = function (req, res, next) {
        req. // intellisense works
    }
    

    【讨论】:

    • 谢谢你的回答ippi,使用typescript声明文件的方法有效。非常感谢!
    • 谢谢,Typescript 声明文件有效,但我注意到它仅在 myTypes.d.ts 文件在编辑器中打开时才有效,也许它只适合我,但必须执行 /// <reference path="./mytypes.d.ts" /> 才能获得智能感知工作。
    猜你喜欢
    • 2018-01-14
    • 2018-05-31
    • 2016-08-22
    • 2019-10-17
    • 1970-01-01
    • 2019-11-01
    • 2016-11-23
    • 2019-11-11
    • 2021-09-01
    相关资源
    最近更新 更多