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.
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.
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.
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With