如何解决JSDoc在实例化后将某些内容标记为Class并定义构造方法属性
我的猫鼬为我创建了一个Model(类),我希望该类具有智能感知。问题是我不知道如何将某物标记为一个类,以及如何为该类键入构造函数。
在查看JSDocs的文档时,它们仅指定如何在声明中键入类,而不是在已经实例化该类时指定。 @class
和@constructor
标签似乎什么也没做。
现在,我通过将其标记为一个函数来获得智能感知(该函数位于幕后,但是在VSC中具有正确的颜色仍然很不错)并定义参数:
/**
* @typedef QPE_Opts
* @type {object}
* @prop {string} id - Id of the user
* ...
*/
/**
* @type {function(QPE_Opts) : mongoose.Model<mongoose.Document,{}> }}
*/
const Queue_PoolEntry = mongoose.model('Queue_PoolEntry',Queue_PoolEntrySchema);
解决方案
解决方案(正在查看未提供足够信息的JsDocs文档,感谢@Graham P Heath提供了the better docs):
/**
* @type {function(new:mongoose.Model<mongoose.Document,{}>,QPE_Opts ) }}
*/
解决方法
如果确定对象的类型,可以type cast:
const Queue_PoolEntry = /** @type {QPE_Opts} */ (mongoose.model('Queue_PoolEntry',Queue_PoolEntrySchema));
在实际上不能确定返回的类型强制转换的情况下,可能是代码异味。在这种情况下:使用代码通过检查对象的预期属性来确定类型断言的有效性,然后对其进行强制转换。
let Queue_PoolEntry = mongoose.model('Queue_PoolEntry',Queue_PoolEntrySchema);
if (Queue_PoolEntry && Queue_PoolEntry.id) {
Queue_PoolEntry = /** @type {QPE_Opts} */ (Queue_PoolEntry)
} else {
throw new Error('mongoose.model(\'Queue_PoolEntry\',Queue_PoolEntrySchema)'+
'returned something other than a QPE_Opts' + Queue_PoolEntry);
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。