如何在vscode的外部文件中获取express中间件的智能感知?

Nia*_*ush 4 javascript intellisense node.js express visual-studio-code

我正在尝试编写一个快递中间件。我把它写在一个文件 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);
Run Code Online (Sandbox Code Playgroud)

这是我的中间件test2.js

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

ipp*_*ppi 7

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

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

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


您还可以使用自己的打字稿声明文件:

myTypes.d.ts

import Express from "express";
declare global { 
    type RequestHandler = Express.RequestHandler;
}
Run Code Online (Sandbox Code Playgroud)

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

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

我的中间件.js

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