如何在 JsDoc(VS Code / IntelliSense)中引用另一个文件中的 class 而无需直接导入?

How to refer in JsDoc (VS Code / IntelliSense) to class from another file without direct import?

问题

我使用 Visual Studio 代码并使用带有 JsDoc 注释的 IntelliSense。 我有两个带有 class 声明的模块:

/**
 * This is Foo class 
 */
export default class Foo {
    constructor() {}
}

/**
 * This is Bar class 
 */
export default class Bar {
    constructor() {}

    /**
     * Init Bar from Foo
     * @param {Foo} foo instance of Foo
     * @returns {Bar}
     */
    static initFromFoo(foo) {
        return new Bar();
    }
}

Class Bar 使用 Foo 作为方法的参数 initFromFoo 但 IntelliSense 不理解 @param Foo 是指 class Foo 并且无法正常工作并表示 foo:any,

https://imgbbb.com/images/2019/09/24/image517c0ec9d1027ac9.png

如何让 IntelliSense 正常工作?

我试过的

  1. ./foo 导入 ./bar- 这使 IntelliSense 工作良好,但我不需要此导入我只需要引用类型定义。
  2. 像在 TypeScript 中那样添加对另一个文件的引用 /// <reference path="./foo"> - 无效果
  3. 使用以下内容创建 jsconfig.json 文件:
{
    "compilerOptions": {
        "target": "es6",
        "allowSyntheticDefaultImports": true,
        "checkJs": true
    },
    "exclude": [
        "node_modules"
    ]
}

也没有影响。它只是突出显示错误 Cannot find name 'Foo'.ts(2304)

P.S. 看起来像 ES6 模块相关的 IntelliSense 限制。因为如果我从两个文件中删除 export/import IntelliSense 会按预期工作

https://i.ibb.co/CPL1gJC/image.png

https://i.ibb.co/xmXqzSk/image.png

P.S.S. 抱歉,我的图片链接太低,无法发布图片。

可以通过 import(path) 语句导入类型。 例如:

/**
 * Init Bar from Foo
 * @param {import('./foo').default} foo instance of Foo
 * @returns {Bar}
 */
static initFromFoo(foo) {
    return new Bar();
}

/**
 * @typedef {import('./foo').default} Foo
 *
 * Init Bar from Foo
 * @param {Foo} foo instance of Foo
 * @returns {Bar}
 */
static initFromFoo(foo) {
    return new Bar();
}

P.S. 仅用于 Visual Studio 代码。它不是有效的 JsDoc。