GOOGLE ADS

Dienstag, 19. April 2022

Wie verweise ich in JsDoc (VS Code / IntelliSense) auf eine Klasse aus einer anderen Datei ohne direkten Import?

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 Bardie FooMethode initFromFoo, aber IntelliSense versteht nicht, dass darauf @param Fooverwiesen wird, class Foound 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

  • Importieren ./fooin ./bar- dadurch funktioniert IntelliSense gut, aber ich brauche diesen Import nicht, ich brauche nur einen Verweis auf die Typdefinition.

  • Verweis auf eine andere Datei wie in TypeScript hinzufügen /// <reference path="./foo">- keine Effekte

  • jsconfig.jsonDatei 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/importaus 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

    Warum werden SCHED_FIFO-Threads derselben physischen CPU zugewiesen, obwohl CPUs im Leerlauf verfügbar sind?

    Lösung des Problems Wenn ich das richtig verstehe, versuchen Sie, SCHED_FIFO mit aktiviertem Hyperthreading ("HT") zu verwenden, ...