繁体   English   中英

JSDoc:如何让 IntelliSense/TypeScript 了解其他文件中的类?

[英]JSDoc: How do I let IntelliSense/TypeScript know about classes from other files?

我正在处理一个相对较大的项目,我想将 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,如上所示)。

TypeScript jsdoc 检查器给我一个错误,说它找不到名称“SQLRegistry”

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

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

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

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

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

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

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

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

TypeScript 语言服务识别 JSDoc 注释位置中需要类型的语法。 请注意,官方TypeScript 手册指出

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM