JSDoc:如何记录返回传递的构造函数实例的函数?
Posted
技术标签:
【中文标题】JSDoc:如何记录返回传递的构造函数实例的函数?【英文标题】:JSDoc: how to document a function that returns an instance of a passed constructor? 【发布时间】:2018-12-10 14:19:16 【问题描述】:例如,我有以下功能:
function createInstanceOf(ObjectConstructor)
return new ObjectConstructor;
当我将类作为参数传递时,我想让 WebStorm 自动完成工作。例如:如果我调用 createInstanceOf(ClassA)
我想查看 ClassA
实例的自动完成功能,如果我调用 createInstanceOf(ClassB)
– 对于 ClassB
实例。所以 JSDoc 函数必须是泛型的。
很容易用 JSDoc 定义一个泛型函数并使@return
值类型与@param
相同,但是我发现没有办法将@param
类型作为返回对象的构造函数。
所以这不起作用:
/**
* @param T ObjectConstructor
* @returns T
* @template T
*/
function createInstanceOf(ObjectConstructor)
return new ObjectConstructor;
我也试着让它这样工作:
/**
* @param function(new:T) ObjectConstructor
* @returns T
* @template T
*/
function createInstanceOf(ObjectConstructor)
return new ObjectConstructor;
但也许我使用了错误的闭包类型,或者 WebStorm 无法解析此类泛型类型。
如果 JSDoc 有多种解决方案,我想找出哪些解决方案专门用于 WebStorm IDE 自动补全。
谢谢
【问题讨论】:
This question 可能会有所帮助。 @RichardSzakacs,感谢您的建议。我已经尝试过答案中建议的闭包类型。更新了我的问题:添加了一个我想出的无效示例 不客气!我刚刚删除了我原来的答案,因为我自己也在寻找这个功能,但显然目前只有 Google Closure 支持@template
,JSDoc 没有任何关于它的文档,我无法告诉,我们什么时候才能为这个功能找到一个可行的解决方案。但我希望...
我也会对更好的方法感兴趣...目前我只是在使用/** @type SomeType */ const instance = createInstanceOf(SomeType);
之类的东西来解决我正在使用这种方法的任何地方
【参考方案1】:
你可能不再需要这个了,但我也被困在这个问题上好几个月了,所以对于其他想知道的人来说,你可以这样做:
/**
* @template T
* @param new() => T ObjectConstructor
* @returns T
*/
function createInstanceOf(ObjectConstructor)
return new ObjectConstructor;
Got the answer from this article
【讨论】:
谢谢你!我也被这个问题困扰了几个月,而你的回答是唯一有效的方法。以上是关于JSDoc:如何记录返回传递的构造函数实例的函数?的主要内容,如果未能解决你的问题,请参考以下文章