web-dev-qa-db-fra.com

Comment "importer" un typedef d'un fichier à un autre dans JSDoc en utilisant Node.js?

Disons que j'ai un fichier nommé "File1.js". Dans ce fichier, j'exporte un objet d'objets et je donne à chaque objet un typedef, comme ça.

/**
 * 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
  }
}

Maintenant, dans un fichier nommé "File2.js", je référence cet objet dans un constructeur et le mets à un nouveau 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;

J'utilise Visual Studio Code pour développer, donc en appuyant sur Ctrl + Espace, j'obtiens IntelliSense. Dans le fichier un et pendant que je crée les objets personne, IntelliSense me dit que le nom d'utilisateur est une chaîne, le nom réel est une chaîne et isUnique est un booléen. Mais, quand je vais dans file2 et référence la personne nouvellement créée via this.person, lors de la frappe this.person.username il ne donne pas le résultat attendu de "Username: String".

Est-il possible d'utiliser le typedef MyObject1 dans File2 dans Vanilla Node.js, ou n'ai-je pas de chance?

Edit: Avec plus d'informations, j'ai pu trouver des réponses avec @export et @import pour TypeScript, ainsi qu'une sorte de balise que j'ai également essayée. Tout cela en vain. J'ai également essayé de marquer File1.js comme @module et de faire module:mymodule~MyMethod, mais chaque fois que je le faisais, cela marquait simplement this.person comme un NodeModule au lieu de la méthode elle-même.

16
FireController1847

Importez le type déclaré dans votre fichier File2.js en utilisant la fonction import.

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

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

class File2 {
...

Ça marche pour moi.

enter image description hereenter image description here

16
Lemix