如何在 JsDoc(VS Code / IntelliSense)中引用另一个文件中的 class 而无需直接导入?
How to refer in JsDoc (VS Code / IntelliSense) to class from another file without direct import?
问题
我使用 Visual Studio 代码并使用带有 JsDoc 注释的 IntelliSense。
我有两个带有 class 声明的模块:
/**
* 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();
}
}
Class Bar
使用 Foo
作为方法的参数 initFromFoo
但 IntelliSense 不理解 @param Foo
是指 class Foo
并且无法正常工作并表示 foo:any
,
https://imgbbb.com/images/2019/09/24/image517c0ec9d1027ac9.png
如何让 IntelliSense 正常工作?
我试过的
- 将
./foo
导入 ./bar
- 这使 IntelliSense 工作良好,但我不需要此导入我只需要引用类型定义。
- 像在 TypeScript 中那样添加对另一个文件的引用
/// <reference path="./foo">
- 无效果
- 使用以下内容创建
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. 抱歉,我的图片链接太低,无法发布图片。
可以通过 import(path) 语句导入类型。
例如:
/**
* Init Bar from Foo
* @param {import('./foo').default} foo instance of Foo
* @returns {Bar}
*/
static initFromFoo(foo) {
return new Bar();
}
或
/**
* @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 代码。它不是有效的 JsDoc。
问题
我使用 Visual Studio 代码并使用带有 JsDoc 注释的 IntelliSense。 我有两个带有 class 声明的模块:
/**
* 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();
}
}
Class Bar
使用 Foo
作为方法的参数 initFromFoo
但 IntelliSense 不理解 @param Foo
是指 class Foo
并且无法正常工作并表示 foo:any
,
https://imgbbb.com/images/2019/09/24/image517c0ec9d1027ac9.png
如何让 IntelliSense 正常工作?
我试过的
- 将
./foo
导入./bar
- 这使 IntelliSense 工作良好,但我不需要此导入我只需要引用类型定义。 - 像在 TypeScript 中那样添加对另一个文件的引用
/// <reference path="./foo">
- 无效果 - 使用以下内容创建
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. 抱歉,我的图片链接太低,无法发布图片。
可以通过 import(path) 语句导入类型。 例如:
/**
* Init Bar from Foo
* @param {import('./foo').default} foo instance of Foo
* @returns {Bar}
*/
static initFromFoo(foo) {
return new Bar();
}
或
/**
* @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 代码。它不是有效的 JsDoc。