如何导出模块接口的typedef



假设我有这个模块foo,方法为barbaz:

function foo(){
function bar() {}
function baz() {}
return { bar, baz }
}

我想定义返回对象的类型,以便将其导入到不同的文件中。但是,只有当@typedef在文件的外部范围内时,才能导入它们。

这里有一种方法可以"有效"地实现所需的结果,但可能对某些类型的模块实现没有弹性。

function foo(){
function bar() {}
function baz() {}
return { bar, baz }
}
let type = foo() // Create a arbitrary instance
/** @typedef {type} foo */

是否有一种有意定义模块接口对象类型的方法?

此外,我不认为在外部范围内为整个对象手动编写typedef是一个好的解决方案,因为文档已经在每个方法上编写了一次。

我使用IDEA进行开发,我将所有数据类型都放在一个单独的文件中,并且我已经向函数指定了数据类型。

也许我不太理解你的问题,但我会指出我所看到的实施情况。有必要描述一次数据类型,指定一次返回的内容,然后一切正常。

外部文件中类型的描述

/**
* @typedef {Object} barRet
* @property {string} name
* @property {boolean} isOpen
*/
/**
* @typedef {Object} bazRet
* @property {number} openClock
* @property {number} closeClock
*/
/**
* @typedef {Object} fooReturned
* @property {barRet} bars
* @property {bazRet} bazs
*/

在函数的代码中,我们指定返回的数据类型

/**
* @returns {fooReturned}
*/
function foo(){
/** @return {barRet} */
function bar() {}
/** @return {bazRet} */
function baz() {}
return { bars: bar, bazs: baz }
}
const fooResult = foo(); // I see fooResult type of fooReturned

最新更新