JSDoc typedef在一个单独的文件中

时间:2017-04-03 11:27:44

标签: jsdoc

我可以在单独的文件中定义所有自定义类型(例如types.jsdoc),以便可以在整个应用程序中重复使用它们吗?什么是正确的方法?

/**
 * 2d coordinates.
 * @typedef {Object} Coordinates
 * @property {Number} x - Coordinate x.
 * @property {Number} y - Coordinate y.
 */

5 个答案:

答案 0 :(得分:5)

这是特定于TypeScript的JSDoc的答案,但是我成功使用triple-slash directive从另一个文件“导入”所有类型成功。这样做的好处是,实际上不会添加未使用的import,这会破坏棉绒和捆扎机。

我将共享类型放在一个名为typedefs.js的文件中,如下所示:

// typedefs.js
/**
 * @typedef {Object} Foo
 * @property {string} bar
 */

/**
 * @typedef {Object} Baz
 * @property {number} buzz
 */

,然后在其他文件中使用/// <reference path="typedefs.js" />来访问共享类型,如下所示:

// randomThing.js
/// <reference path="typedefs.js" />

/**
 * Turn a Foo into a Baz
 *
 * @param {Foo} a
 * @return {Baz}
export function (a) {
  return { buzz: a.bar.length };
}

但是,棘手的是,现在typedefs.js仅在注释中被引用,像汇总这样的捆绑器完全错过了它。因此,我将其与我的旧consts.js结合在一起,后者导出了一些常量,并且至少在一个地方导入了该常量。这样,typedef仍将包含在汇总输出中。

希望其他人对此有帮助。

p.s。汇总将完全排除纯JSDoc typedefs.js文件_即使您由于摇晃而拥有import './typedefs.js'也是如此!必须使用--no-treeshake运行汇总,以将这些注释保留在汇总输出中。

答案 1 :(得分:1)

我通常在我的项目中做类似的事情,区别在于我使用扩展名.js来命名文件。 Webstorm完美运行,能够检查类型并自动完成就好了。它无法识别.jsdoc扩展名(我刚检查过),因此即使文件中不包含任何代码语句,也要坚持.js

答案 2 :(得分:1)

我刚尝试使用VSCode,只有在编辑器中打开单独的文件时它才有效。如果不是,则将外部typedef键入为任何

答案 3 :(得分:0)

在一个模块(例如typedefs.js)中定义它们对我都有效:该模块包含所有jsdoc typdef,然后仅导出一个空的{}对象。我可以在要使用类型定义的任何位置(例如const typedefs = require("./typedefs");)将其导入。这是一个很小的额外步骤,但并不困难。

答案 4 :(得分:0)

在 vscode 中,import('./path/to/types.js').def 标签可以正常工作。

例如
types.js

/**
 * @typedef {Object} connection
 * @property {String} id
 * @property {Number} pingRetries
 * @property {(data:Object) => void} sendJSON
 */
exports.unused = {};

还有someFile.js

/**
 * @param {import('./types').connection} param
 */
const someFunc = (param) => {}

另外,请注意 exports.unused = {}types.js 文件中是必要的,否则 import('./types') 的自动导入将不起作用,您可能必须自己输入。

相关问题