jsdoc:来自其他模块的引用typedef-ed类型

pht*_*ier 7 jsdoc jsdoc3

假设我在js模块中有一个typedef类型

// somewhere/foo.js
/**
 * @module
 */ 
/**
 * @typedef Foo
 * @type {object}
 * property {string} bar - some property
 */
Run Code Online (Sandbox Code Playgroud)

是否可以在另一个模块中引用此类型,以便在jsdoc生成的HTML页面中,类型显示为typedef-ed模块的链接?

我试过这种变化,但似乎没有任何作用......

// somewhere_else/bar.js
/**
 * @module
 */
/**
 * @param {somewhere/foo/Foo} foo - some param
 */
export default function doStuff(foo) {
  ...
}
Run Code Online (Sandbox Code Playgroud)

Tod*_*Tod 7

上面的答案在搜索结果中显示的很高,所以我记录了对我有用的内容,以防它对处于类似情况的人有所帮助。

我正在将 Visual Studio 代码用于// @ts-check我所有模块上的节点项目。使用上述语法会在module:语法上出现问题。此外,代码帮助无法正常工作。我花了一段时间,但答案最终很简单

如果我myTypedef在一个模块中有 typedefmyModule然后在我需要的第二个模块中myModule
mm = require(myModule)
我可以使用类似的东西
/** @param {mm.myTypedef} myParamName */


Arc*_*ano 7

TypeScript 不支持该module语法,因此如果您假设它可以工作,那么我还无法使上述解决方案发挥作用。

要使其与 TypeScript 一起使用,请使用导入类型

对于OP我会这样做的方式是

// foo.d.ts
export type Foo = {
  /**
   * some property
   */
  bar: string,
};
Run Code Online (Sandbox Code Playgroud)

然后在 JS 模块中将其引用为

// foo.d.ts
export type Foo = {
  /**
   * some property
   */
  bar: string,
};
Run Code Online (Sandbox Code Playgroud)

您可以通过将以下内容添加到文件的开头来更严格地验证各个文件是否正常工作。这将在 Visual Studio 代码中启用 Typescript 检查特定文件,以帮助您为将来迁移到 Typescript 做好准备。

// @ts-check
Run Code Online (Sandbox Code Playgroud)


Sla*_*nov 6

这对我有用...

// somewhere/foo.js
/**
 * @module foo
 */
/**
 * @typedef module:foo.Foo
 * @type {object}
 * @property {string} bar - some property
 */
Run Code Online (Sandbox Code Playgroud)

还有...

// somewhere_else/bar.js
/// <reference path="foo.js" />
/**
 * @module bar
 */
/**
 * @param {module:foo.Foo} foo - some param
 */
function doStuff(foo) {
  //...
};
Run Code Online (Sandbox Code Playgroud)