如何进口"使用Node.js在JSDoc中从一个文件到另一个文件的typedef?

时间:2018-04-14 22:08:07

标签: javascript node.js jsdoc

我们说我有一个名为" 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。在文件一中,当我制作人物对象时,IntelliSense告诉我用户名是一个字符串,realname是一个字符串,isUnique是一个布尔值。但是,当我进入file2并通过this.person引用新成员时,在键入this.person.username时,它没有提供"用户名:字符串"的预期结果。

是否可以在vanilla Node.js中使用File2中的typedef MyObject1,或者我运气不好?

编辑:通过更多信息,我能够找到针对TypeScript的@export和@import的答案,以及我尝试过的各种标签。所有这些都无济于事。我还尝试将File1.js标记为@module,并执行module:mymodule~MyMethod,但每次我这样做时,只需将this.person标记为NodeModule而不是方法本身。

1 个答案:

答案 0 :(得分:9)

使用函数File2.js将声明的类型导入文件import中。

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

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

class File2 {
...

对我有用。

enter image description here enter image description here