Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to "import" a typedef from one file to another in JSDoc using Node.js?

Let's say I have a file named "File1.js". In this file, I export an object of objects and I give each object a typedef, like so.

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

Now, in a file named "File2.js", I reference this object in a constructor and set it to a new 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; 

I use Visual Studio Code to develop, so by pressing Ctrl+Space I get IntelliSense. Within file one and while I'm making the person objects, IntelliSense tells me that username is a string, realname is a string, and isUnique is a boolean. But, when I go into file2 and reference the newly made person via this.person, when typing this.person.username it does not come up with the expected result of "Username: String".

Is it possible to use the typedef MyObject1 in File2 in vanilla Node.js, or am I out of luck?

Edit: With some more information, I was able to find answers with @export and @import for TypeScript, as well as a tag of sorts that I tried as well. All of which to no avail. I also tried marking File1.js as a @module, and doing module:mymodule~MyMethod, but every time I did that it'd just mark this.person as a NodeModule instead of the method itself.

like image 881
FireController1847 Avatar asked Apr 14 '18 22:04

FireController1847


People also ask

How do I import function from another file node?

To include functions defined in another file in Node. js, we need to import the module. we will use the require keyword at the top of the file. The result of require is then stored in a variable which is used to invoke the functions using the dot notation.

Can you use import statements in node?

If you have used other JavaScript frameworks like React or Vue. js, then you know that these frameworks use the “import” keyword for importing files and modules instead of the “require” keyword — used by Node. js. But if you want to use the “import” statement in your Node.


1 Answers

Import the declared type in your file File2.js using the function import.

const persons = require('./File1.js');  /**  * @typedef {import('./File1.js').MyObject1} MyObject1  */  class File2 { ... 

It works for me.

enter image description here enter image description here

like image 123
Lemix Avatar answered Sep 23 '22 14:09

Lemix