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

问题描述 投票:0回答:1

我使用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正常工作?

我尝试过的

    ./foo导入./bar-这使IntelliSense正常工作,但是我不需要此导入,我只需要引用类型定义即可。
  1. [添加对另一个文件的引用,如TypeScript /// <reference path="./foo">-无影响
  2. 使用下一个内容创建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。

    很抱歉,我的仓库中的图像链接太低,无法发布图像。
    visual-studio-code intellisense es6-modules jsdoc javascript-intellisense
    1个回答
    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。
    © www.soinside.com 2019 - 2024. All rights reserved.