You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VS Code中JSDoc如何引用其他模块类型?示例中如何声明foo(ta)?

在VS Code中用JSDoc引用CommonJS模块的类型

针对你给出的CommonJS模块场景,有几种可行的方式给foo函数的ta参数声明正确的类型:

方式1:不修改ma.js,通过返回类型推导

因为ma.makeTA()返回的就是TA实例,直接用JSDoc的ReturnType工具类型获取该函数的返回类型即可,无需改动原模块:

const ma = require('./ma');

foo(ma.makeTA());

/** 
 * @param {ReturnType<typeof ma.makeTA>} ta
 */
function foo(ta) {...}

VS Code会自动识别ma.makeTA的返回类型,提供对应的代码提示。

方式2:修改ma.js,显式导出TA类

如果允许调整ma.js,可以给TA类加上JSDoc注释并导出,让其他模块能直接引用:

先修改ma.js:

/**
 * TA类的业务描述
 * @class
 */
class TA {...}

// 同时导出makeTA函数和TA类
module.exports = { makeTA: () => new TA, TA };

再在mb.js中引用:

const ma = require('./ma');

foo(ma.makeTA());

/** 
 * @param {ma.TA} ta
 */
function foo(ta) {...}

也可以用模块路径直接引用类型:

/** 
 * @param {import('./ma').TA} ta
 */
function foo(ta) {...}

方式3:不导出TA类,仅导出类型定义

如果不想暴露TA类本身,可在ma.js里用@typedef把TA类型关联到类,再间接导出:

修改ma.js:

/**
 * TA类型的描述
 * @typedef {TA} TA
 */
class TA {...}

module.exports = { makeTA: () => new TA };

在mb.js中引用:

const ma = require('./ma');

foo(ma.makeTA());

/** 
 * @param {import('./ma').TA} ta
 */
function foo(ta) {...}

内容的提问来源于stack exchange,提问作者user2771324

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 12:16:12