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

时间:2019-09-24 15:00:17

标签: visual-studio-code intellisense es6-modules jsdoc javascript-intellisense

问题

我使用Visual Studio Code,并将IntelliSense与JsDoc注释一起使用。 我有两个带有类声明的模块:

/**
 * 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();
    }
}

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)

PS 。它看起来像与ES6模块有关的IntelliSense限制。因为如果我从两个文件中删除export/import,IntelliSense都会按预期工作

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

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

P.S.S。。很抱歉,我的存储库中的图像链接太低,无法发布图像。

1 个答案:

答案 0 :(得分:0)

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

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

OR

/**
 * @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 Code。这不是有效的JsDoc。