繁体   English   中英

JSDoc:Typedef从文字

[英]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(). 将建议成员foobar 👍

但是,假设我需要将该对象传递给其他函数。 为了让这些函数了解这是“东西”,我想@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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM