【问题标题】:How to tell JSDoc that a method returns an object containing a class type?如何告诉 JSDoc 方法返回一个包含类类型的对象?
【发布时间】:2019-02-03 06:20:14
【问题描述】:

我有一个 Node.js 函数来创建 Express 服务器。

我已将 //@ts-check 添加到文件中,以便 VSCode 对所有内容进行 lints 和类型检查。

记录这个createServer函数的正确方法是什么?

我想表明它返回一个 Promise,它解析一个包含 Express 实例 (app) 和数字 (port) 的对象

如果这是一个反模式,那也很高兴知道。

//@ts-check
const express = require('express');

/**
 * @param {Number} port
 * @returns {Promise}
 */
function createServer(port) {
    return new Promise((resolve, reject) => {
        const app = express();
        server = app.listen(port, () => {
            resolve({app, port});
        });
    });
}

【问题讨论】:

  • 我一直使用Promise<Resolving object type>
  • 这对我来说似乎不是一个好的模式。听后添加中间件可能无法按预期工作,具体取决于您的使用方式。我看不出用{app, port} 解决问题的充分理由。通常你只需要appport 的目的是什么?你已经把它放在了你打电话给createServer的地方。
  • @estus 感谢您指出这一点。我同意,如果我有 port 作为输入,那么为什么将其添加为输出。它主要是减少我的单元测试中的重复代码,但我感谢你指出这一点
  • 我猜测试实际上是您可能需要批量创建服务器的唯一地方。但请记住,将服务器实例化和监听分开是有益的。例如。 github.com/visionmedia/supertest 最适合未侦听的 Express 实例。

标签: node.js typescript visual-studio-code jsdoc ts-check


【解决方案1】:

这是为我编译的:

//@ts-check
const express = require('express');

/**
 * @param {Number} port
 * @returns {Promise<{app: import("express").Express, port: number}>}
 */
function createServer(port) {
    return new Promise((resolve, reject) => {
        const app = express();
        const server = app.listen(port, () => {
            resolve({app, port});
        });
    });
}

更多信息请参见the documentation page

【讨论】:

  • 喜欢评论中的这个导入! (y) 谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-04
  • 2012-06-09
  • 1970-01-01
  • 1970-01-01
  • 2019-04-07
相关资源
最近更新 更多