【问题标题】:JSDoc: @type for nested functionJSDoc:嵌套函数的@type
【发布时间】:2020-12-22 03:56:56
【问题描述】:

我有一个 factory 函数,它定义并返回其他函数 - myFunc。我想用 JSDocs 记录我的工作变量:

function factory() {
    function myFunc(param) {
        console.log(`Hello ${param}!`);
    }

    return myFunc;
}

/** @type {factory} */
const fact = factory;
/** @type {???} */
const fn = fact();
fn('world');

我可以记录factory函数:

/** @type {factory} */
const fact = factory;

但我的 IDE (IDEA PhpStorm) 无法以相同的方式解析内部函数:

/** @type {myFunc} */
const fn = factory();

在这种情况下,我无法使用 Ctrl+单击导航。是否存在解决内部功能的方法?嗯。喜欢factory#myFunc:

/** @type {factory#myFunc} */
const fn = factory();

【问题讨论】:

    标签: javascript intellij-idea jsdoc


    【解决方案1】:

    可以在嵌套函数上使用@exports directive

    function factory() {
        /** @exports myFunc */
        function myFunc(param) {
            console.log(`Hello ${param}!`);
        }
        return myFunc;
    }
    
    /** @type {factory} */
    const fact = factory;
    /** @type {myFunc} */
    const fn = fact();
    fn('world');
    

    【讨论】:

      【解决方案2】:

      您的 factory 返回一个函数,该函数接受一个字符串但什么也不返回。

      这可以通过使用@return标签的类型表达式来表达:

      /** @return {function(string): void} */
      function factory() {
        function myFunc(param) {
          console.log(`Hello ${param}!`);
        }
        return myFunc;
      }
      

      如果x 被分配了factory() 的结果,您的I​​DE 应该能够计算出它的类型:

      【讨论】:

      • 在这种情况下,我的 IDE PhpStorm 无法通过 'Ctrl+Click' 导航到 myFunc :( 我的第一个目标是代码导航,而不仅仅是使用 JSDoc 返回值定义。无论如何感谢您的回答 :)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-04-19
      • 2015-08-23
      • 2013-10-14
      • 2017-01-08
      • 1970-01-01
      • 1970-01-01
      • 2012-03-12
      相关资源
      最近更新 更多