问题描述
我正在从事一个相对较大的项目,我想将JSDoc添加到我的类和文件中,以使其更容易开发。我的“ Configuration”类/对象有一个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}
*/
解决方法
您的假设@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,不要与仅输入类型混淆,并在TypeScript 2.9中引入。
这不是JSDoc的特定功能,而是来自TypeScript。
TypeScript语言服务在JSDoc注释位置中识别期望类型的语法。请注意,官方TypeScript Handbook states that
您还可以使用导入类型从其他文件导入声明。此语法是TypeScript特定的,并且与JSDoc标准不同: