[英]JSDoc: Typedef from literal
让我们考虑以下代码,该函数返回具有两个函数的对象:
/**
* Create a something
* @returns {object} Something
*/
function createSomething() {
return {
/**
* Foo!
* @returns {string}
*/
foo() { return 'foo';},
/**
* Bar!
* @returns {string}
*/
bar() { return 'bar';}
};
}
当调用此方法时,即使返回类型只是object
,IDE:s(如WebStorm)也会从返回的文字中推断出类型,以便键入createSomething().
将建议成员foo
和bar
。 👍
但是,假设我需要将该对象传递给其他函数。 为了让这些函数了解这是“东西”,我想@typedef
它,所以我执行以下操作:
/**
* @typedef {object} Something
*/
/**
* Create a something
* @returns {Something} Something
*/
function createSomething() {
return {
/**
* Foo!
* @returns {string}
*/
foo() { return 'foo';},
/**
* Bar!
* @returns {string}
*/
bar() { return 'bar';}
};
}
现在我们有了从createSomething()
返回的对象的类型。 但是,由于显式声明了返回类型,因此IDE 不会自动从返回值中推断出任何成员,因此,我们现在有了一个没有任何已知成员的已定义类型。 👎
我当然可以手动输入每个构件作为@property
的内@typedef
,像这样:
/**
* @typedef {object} Something
* @property {function} foo
* @property {function} bar
*/
但是,这意味着每当我从Something
对象中添加或删除任何成员时,都必须手动保持typedef同步。
我尝试将@typedef
放在createSomething()
return
语句的上方,希望它会向JSDoc和IDE提示typedef具有以下文字中定义的成员,但无济于事-似乎@typedef {object}
除明确声明的@property
成员外,总是被视为没有其他成员。
有没有一种方法可以让IDE从返回的文字中自动推断出成员,同时为返回的对象定义类型? 基本上,我希望与使用ES6类时发生的事情相同-它会自动成为一种类型,并将所有方法作为成员。
您可以在对象初始化之前使用@lends标记,例如:
function createSomething() {
return /** @lends Something# */ {
// properties
}
}
/** @param {Something} s */
function f(s) {}
WebStorm理解这一点。 请注意@lends
名字后#
号。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.