Fir*_*847 11 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
}
}
Run Code Online (Sandbox Code Playgroud)
现在,在名为"File2.js"的文件中,我在构造函数中引用此对象并将其设置为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;
Run Code Online (Sandbox Code Playgroud)
我使用Visual Studio Code进行开发,因此按Ctrl + Space我会获得IntelliSense.在文件一中,当我正在创建person对象时,IntelliSense告诉我username是一个字符串,realname是一个字符串,isUnique是一个布尔值.但是,当我进入file2并引用新创建的人时this.person
,在键入this.person.username
时没有得到"Username:String"的预期结果.
是否可以MyObject1
在vanilla Node.js中使用File2中的typedef ,或者我运气不好?
编辑:通过更多信息,我能够找到针对TypeScript的@export和@import的答案,以及我尝试过的各种标签.所有这些都无济于事.我也尝试将File1.js标记为@module,并且这样做module:mymodule~MyMethod
,但每次我这样做时,它只是将this.person标记为NodeModule而不是方法本身.
Che*_*leg 35
我发现有效的另一件事是导出并清空模型,然后将其用作对类型的引用:
类型.js:
/**
* @typedef MyType
* @prop {string} name
* @prop {string} description
*/
export const Types = {}
Run Code Online (Sandbox Code Playgroud)
然后在其他文件中,您可以导入该文件并获取该虚拟对象的类型:
文件1.js
import * as Types from "./types.js"
/** @type {Types.MyType} */
const myVar = { name : 'Roy', description : 'abc123'};
Run Code Online (Sandbox Code Playgroud)
优点:
缺点:
此导入永远不会用作值,并且必须使用“导入类型”,因为“importsNotUsedAsValues”设置为“错误”
如果你有那个标志。
要绕过该警告,您只需使用 ts-ignore 禁用它:
// @ts-ignore
import * as Types from "./types.js";
Run Code Online (Sandbox Code Playgroud)
小智 16
File2.js
使用该函数在文件中导入声明的类型import
.
const persons = require('./File1.js');
/**
* @typedef {import('./File1.js').MyObject1} MyObject1
*/
class File2 {
...
Run Code Online (Sandbox Code Playgroud)
这个对我有用.
归档时间: |
|
查看次数: |
2864 次 |
最近记录: |