Problem
Ich verwende Visual Studio Code und verwende IntelliSense mit JsDoc-Kommentaren. Ich habe zwei Module mit Klassendeklarationen:
/**
* This is Foo class
*/
export default class Foo {
constructor() {}
}
und
/**
* 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();
}
}
Klassenverwendung als Parameter für Bar
die Foo
Methode initFromFoo
, aber IntelliSense versteht nicht, dass darauf @param Foo
verwiesen wird, class Foo
und funktioniert nicht richtig und sagt, dass foo:any
,
https://imgbbb.com/images/2019/09/24/image517c0ec9d1027ac9.png
Wie kann ich dafür sorgen, dass IntelliSense gut funktioniert?
Was ich probiert habe
./foo
in ./bar
- dadurch funktioniert IntelliSense gut, aber ich brauche diesen Import nicht, ich brauche nur einen Verweis auf die Typdefinition./// <reference path="./foo">
- keine Effektejsconfig.json
Datei mit folgendem Inhalt erstellen:{
"compilerOptions": {
"target": "es6",
"allowSyntheticDefaultImports": true,
"checkJs": true
},
"exclude": [
"node_modules"
]
}
auch keine Effekte. Es hebt nur Fehler hervorCannot find name 'Foo'.ts(2304)
PS Es sieht nach einer IntelliSense-Einschränkung aus, die sich auf ES6-Module bezieht. Denn wenn ich export/import
aus beiden Dateien entferne, funktioniert IntelliSense wie erwartet
https://i.ibb.co/CPL1gJC/image.png
https://i.ibb.co/xmXqzSk/image.png
PSS Entschuldigung für Links zu Bildern, mein Repo ist zu niedrig für das Posten von Bildern.
Lösung des Problems
Es ist möglich, den Typ durch die import( path ) -Anweisung zu importieren. Zum Beispiel:
/**
* Init Bar from Foo
* @param {import('./foo').default} foo instance of Foo
* @returns {Bar}
*/
static initFromFoo(foo) {
return new Bar();
}
ODER
/**
* @typedef {import('./foo').default} Foo
*
* Init Bar from Foo
* @param {Foo} foo instance of Foo
* @returns {Bar}
*/
static initFromFoo(foo) {
return new Bar();
}
PS Es ist nur für Visual Studio Code hack. Es ist kein gültiges JsDoc.
Keine Kommentare:
Kommentar veröffentlichen