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
相关产品推荐
相关产品推荐

