typescript - 从导入的类型创建 typedef
问题描述
要配置我的模块,用户必须从配置文件中导出一个函数:像这样
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) => {}
理想情况下,我想要简单地从创建一个 typedef import('module')
,例如:
/**
* @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...
等等。
解决方案
我花了很多时间试图弄清楚这一点。许多答案是特定于 TypeScript 的。这是我在我的 commonJS 应用程序中发现的工作(不需要导入/导出模块)。
- 创建一个 .js 文件,例如 typedefs.js
- 在 typedef(s) 上使用 @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
*/
在另一个文件(例如文件夹/file.js)中使用的 typedef:
/**
* I'm a function
* @param {Object} state
* @param {myDef} x
* @returns {Object} state
*/
const function = (state, x) => state;
推荐阅读
- javascript - 选项卡单击后立即浮动的 HTML 按钮
- php - 从浏览器中检索 cookie 将与 php curl 一起使用?
- javascript - 使用淡入淡出在悬停和返回时更改图像
- javascript - 如何在 HTLM5 中为我的幻灯片添加计时器?
- java - 亚马逊 API 网关 403 禁止
- checksum - CRC-8 与 Fletcher-16 的错误检测性能
- php - Codeigniter - 制作自己的常量而不是使用 config/constant.php
- google-geocoder - 地理编码 API 结果中缺少国家/地区组件
- swift3 - 在 Swift 中集成 Sinch 第三方库时出错?
- javascript - Ext JS Grid 视图中的 sessionStorage 代理实现面临的问题