【问题标题】:Create a typedef from an imported type从导入的类型创建 typedef
【发布时间】:2021-12-25 21:51:59
【问题描述】:

要配置我的模块,用户必须从配置文件中导出一个函数:像这样

export default (foo, bar, baz) => {}

由于这些都是复杂类型,为了让事情更简单一些,我想添加它们可以与 JSDoc 一起使用的类型。

现在,以下内容功能齐全,但有点重复。

/**
 * @param {import('module').Foo} foo
 * @param {import('module').Bar} bar
 * @param {import('module').Baz} baz 
 */
export default (foo, bar, baz) => {}

理想情况下,我只想从import('module') 创建一个 typedef,例如:

/**
 * @typedef {import('module')} Module
 *
 * @param {Module.Foo} foo
 * @param {Module.Bar} bar
 * @param {Module.Baz} baz
 */
export default (foo, bar, baz) => {}

虽然这似乎不起作用,但有没有办法让它发挥作用?真正的函数有 6 个参数,而不是 3 个,所以import('module') 一行一行的说起来有点可笑。

有没有办法得到这种行为?如果需要,我可以编辑 TS,现在它只是简单的export type Foo... 等。

【问题讨论】:

  • 我不是很清楚你的问题。但是,我认为在导入期间使用别名可能会解决您的问题。对于默认导出,您可以使用 import alias from 'module'; 之类的内容。然后使用您喜欢的别名调用这些成员。
  • @cindy50633 您需要在 JSDoc 中使用动态导入。您不能使用这样的导入类型。据我所知,您也不能默认导出多种类型,因此无论如何这都行不通。您当然可以使用import * as module from 'module',但这不适用于 JSDoc,所以没关系。

标签: typescript jsdoc


【解决方案1】:

我花了很多时间试图弄清楚这一点。许多答案是特定于 TypeScript 的。这是我在我的 commonJS 应用程序中发现的工作(无需导入/导出模块)。

  • 创建一个 .js 文件,例如typedefs.js
  • 在 typedef 上使用 @exports
  • (可选)如果您希望将 @namespace 与类型定义分开,请将 @namespace 放在文件顶部,并将 @memberof 放在 typedef(s) 中
  • 在另一个文件中按名称引用 typedef
  • 注意:typedefs.js 文件需要位于运行 jsdoc 的文件夹中——尽管不一定在同一级别
    • 例如jsdoc -r /project/folder 其中“文件夹”包含 typedefs.js 文件和引用 typedef 的文件

typedefs.js 文件内容:

/**
 * @namespace typedefs
 */

/**
 * @exports  myDef
 * @typedef  myDef
 * @type     {Object}
 * @property {string} aString
 * @property {Object} anObject
 * @memberof typedefs
 */

另一个文件中使用的typedef(例如文件夹/file.js):

/**
 * I'm a function
 * @param   {Object}  state
 * @param   {myDef}   x
 * @returns {Object}  state
 */
const function = (state, x) => state;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-14
    • 1970-01-01
    • 2018-10-31
    • 1970-01-01
    • 2021-09-29
    • 1970-01-01
    相关资源
    最近更新 更多