【问题标题】:JSDoc: How do I let IntelliSense/TypeScript know about classes from other files?JSDoc:如何让 IntelliSense/TypeScript 了解其他文件中的类?
【发布时间】:2020-12-30 06:56:28
【问题描述】:

我正在做一个相对较大的项目,我想将 JSDoc 添加到我的类和文件中,以使其更容易开发。我的“配置”类/对象有一个 getter 函数,该函数返回其“SQLRegistry”对象的实例,该对象稍后在链中设置。

//configuration.js

/**
 * @returns {SQLRegistry} registry
 */
getRegistry() {
    return this._registry;
}
//sqlRegistry.js
const Configuration = require('./configuration');

class SQLRegistry {
    //other code
}

不幸的是,在带有 IntelliSense/ESLint 的 VS Code 中,它提供了一个错误,指出它找不到类“SQLRegistry”。在任何其他情况下,我只会将 sqlRegistry.js 导入 configuration.js,但在这种情况下我不能(因为 sqlRegistry 依赖于 configuration.js,如上所示)。

是否可以在文件顶部放置某种 JSDoc 注释,告诉它读取 sqlRegistry.js,以便它知道 SQLRegistry 类?例如,类似:

/**
 * @include {@link ./sqlRegistry.js}
 */

【问题讨论】:

    标签: javascript node.js typescript visual-studio-code jsdoc


    【解决方案1】:

    您假设的@include {@link ./sqlRegistry.js} 原则上非常接近。

    在TypeScript对JSDoc语法的解释下,实际写这个的方式是

    /**
     * @returns {import('./sqlRegistry.js')} registry
     */
    getRegistry() {
        return this._registry;
    }
    

    请注意,真正为 VS Code 的主要 JavaScript 功能(如类型推断)提供支持的是 TypeScript,而不是 ESLint

    这种语法,import('module-specifier') 在类型位置,被称为 import types,不要与 Type only imports 混淆,它是在 TypeScript 2.9 中引入的。

    这不是 JSDoc 特有的功能,而是来自 TypeScript。

    TypeScript 语言服务可识别 JSDoc 注释位置中的语法,其中需要类型。注意官方TypeScript Handbook states that

    您还可以使用导入类型从其他文件中导入声明。此语法是 TypeScript 特定的,与 JSDoc 标准不同:

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-02-01
    • 2012-10-07
    • 2018-01-06
    • 2018-01-31
    • 2016-07-29
    • 2019-01-29
    • 2020-07-10
    • 1970-01-01
    相关资源
    最近更新 更多