如何使用 Node.js 在 JSDoc 中 "import" 从一个文件到另一个文件的 typedef?
How to "import" a typedef from one file to another in JSDoc using Node.js?
假设我有一个名为 "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 代码进行开发,所以按 Ctrl+Space 我得到 IntelliSense。在第一个文件中,当我制作人物对象时,IntelliSense 告诉我 username 是一个字符串,realname 是一个字符串,而 isUnique 是一个布尔值。但是,当我进入 file2 并通过 this.person
引用新创建的人时,当输入 this.person.username
时,它没有得到 "Username: String".
的预期结果
是否可以在原版 Node.js 的 File2 中使用 typedef MyObject1
,还是我运气不好?
编辑:通过更多信息,我能够使用 @export 和 @import for TypeScript 找到答案,以及我也尝试过的各种标签。所有这些都无济于事。我还尝试将 File1.js 标记为 @module,并执行 module:mymodule~MyMethod
,但每次我这样做时,它只会将 this.person 标记为 NodeModule 而不是方法本身。
使用函数 import
.
在文件 File2.js
中导入声明的类型
const persons = require('./File1.js');
/**
* @typedef {import('./File1.js').MyObject1} MyObject1
*/
class File2 {
...
对我有用。
假设我有一个名为 "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 代码进行开发,所以按 Ctrl+Space 我得到 IntelliSense。在第一个文件中,当我制作人物对象时,IntelliSense 告诉我 username 是一个字符串,realname 是一个字符串,而 isUnique 是一个布尔值。但是,当我进入 file2 并通过 this.person
引用新创建的人时,当输入 this.person.username
时,它没有得到 "Username: String".
是否可以在原版 Node.js 的 File2 中使用 typedef MyObject1
,还是我运气不好?
编辑:通过更多信息,我能够使用 @export 和 @import for TypeScript 找到答案,以及我也尝试过的各种标签。所有这些都无济于事。我还尝试将 File1.js 标记为 @module,并执行 module:mymodule~MyMethod
,但每次我这样做时,它只会将 this.person 标记为 NodeModule 而不是方法本身。
使用函数 import
.
File2.js
中导入声明的类型
const persons = require('./File1.js');
/**
* @typedef {import('./File1.js').MyObject1} MyObject1
*/
class File2 {
...
对我有用。