我使用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正常工作,但是我不需要这种导入,我只需要引用类型定义即可。/// <reference path="./foo">
中-没有效果jsconfig.json
文件:{
"compilerOptions": {
"target": "es6",
"allowSyntheticDefaultImports": true,
"checkJs": true
},
"exclude": [
"node_modules"
]
}
也没有效果。它只是突出显示错误Cannot find name 'Foo'.ts(2304)
PS 。它看起来像与ES6模块有关的IntelliSense限制。因为如果我从两个文件中删除export/import
,IntelliSense都会按预期工作
https://i.ibb.co/CPL1gJC/image.png
https://i.ibb.co/xmXqzSk/image.png
P.S.S。。很抱歉,我的存储库中的图像链接太低,无法发布图像。
答案 0 :(得分: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。