web-dev-qa-db-ja.com

Node.jsを使用してJSDocで1つのファイルから別のファイルにtypedefを「インポート」する方法

「File1.js」という名前のファイルがあるとします。このファイルでは、オブジェクトのオブジェクトをエクスポートし、各オブジェクトにtypedefを付けています。

/**
 * My typedef for each object.
 * @typedef {Object} MyObject1
 * @property {String} username Your username
 * @property {String} realname Your real name.
 * @property {boolean} isUnique Are you unique as a person?
 */
module.exports = {
  /**
   * Person One!
   * @type {MyObject1}
   */
  myperson: {
    username: 'TheDragonSlayer',
    realname: 'George',
    isUnique: true
  },
  /**
   * Person Two!
   * @type {MyObject1}
   */
  myperson2: {
    username: 'BobMagee',
    realname: 'Bob',
    isUnique: false
  }
}

次に、「File2.js」という名前のファイルで、このオブジェクトをコンストラクターで参照し、新しいMyObject1に設定します。

const persons = require('./File1.js');

class File2 {
  constructor(options = {}) {
    /**
     * The person for this file.
     * @type {MyObject1}
     */
    this.person = options.person ? persons[options.person] : persons.myperson2;
  }
}

module.exports = File2;

開発にはVisual Studio Codeを使用しているため、Ctrl + Spaceを押すとIntelliSenseが表示されます。ファイル1内で、私が人物オブジェクトを作成している間、IntelliSenseは、ユーザー名は文字列、実名は文字列、isUniqueはブール値であることを教えてくれます。しかし、file2に移動してthis.personを介して新しく作成された人を参照すると、this.person.usernameと入力すると、「ユーザー名:文字列」の期待される結果が得られません。

バニラNode.jsのFile2でtypedef MyObject1を使用することはできますか、それとも不運ですか?

編集:いくつかの詳細情報を使用して、TypeScriptの@exportと@importを使用して回答を見つけることができました。これらはすべて役に立ちません。 File1.jsを@モジュールとしてマークしてmodule:mymodule~MyMethodを実行することも試みましたが、そのたびにthis.personをメソッド自体ではなくNodeModuleとしてマークするだけでした。

16

宣言した型をファイルにインポートしますFile2.js関数importを使用します。

const persons = require('./File1.js');

/**
 * @typedef {import('./File1.js').MyObject1} MyObject1
 */

class File2 {
...

わたしにはできる。

enter image description hereenter image description here

16
Lemix