JHH*_*JHH 2 javascript intellij-idea jsdoc webstorm
让我们考虑以下代码,一个返回具有两个函数的对象的函数:
/**
* Create a something
* @returns {object} Something
*/
function createSomething() {
return {
/**
* Foo!
* @returns {string}
*/
foo() { return 'foo';},
/**
* Bar!
* @returns {string}
*/
bar() { return 'bar';}
};
}
Run Code Online (Sandbox Code Playgroud)
调用此方法时,即使返回类型很简单object,WebStorm 等 IDE 也会从返回的文字推断出类型,因此输入时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';}
};
}
Run Code Online (Sandbox Code Playgroud)
现在我们有了从 返回的对象的类型createSomething()。但是,由于显式声明了返回类型,IDE 不会自动从返回值推断任何成员,因此我们现在拥有一个没有任何已知成员的定义类型。
我当然可以@property在 中手动输入每个成员作为 a @typedef,如下所示:
/**
* @typedef {object} Something
* @property {function} foo
* @property {function} bar
*/
Run Code Online (Sandbox Code Playgroud)
但是,这意味着每当我从对象中添加或删除任何成员时,都必须手动保持 typedef 同步Something。
我尝试将语句放在 中@typedef的正上方,希望它能向 JSDoc 和 IDE 提示 typedef 具有以下文字中定义的成员,但无济于事 - a似乎总是被视为除明确指出的。returncreateSomething()@typedef {object}@property
有没有办法让 IDE 自动从返回的文字推断成员,同时为返回的对象定义类型?基本上我想要与使用 ES6 类时发生的情况相同 - 它自动成为一种所有方法都作为成员的类型。
您可以在对象初始值设定项之前使用@lends标记,如下所示:
function createSomething() {
return /** @lends Something# */ {
// properties
}
}
/** @param {Something} s */
function f(s) {}
Run Code Online (Sandbox Code Playgroud)
WebStorm 明白这一点。请注意#在姓名后签名@lends。
| 归档时间: |
|
| 查看次数: |
794 次 |
| 最近记录: |