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:如何记录返回传递的构造函数实例的函数?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 jsdoc-toolkit 记录匿名函数(闭包)

如果一些被解构而另一些没有被解构,如何记录函数的参数(JSDoc)

如何在 JSDoc 中记录 JSON 参数?

从函数返回对象时调用C ++中的复制构造函数?

无法将类实例传递给构造函数

JSDoc中的文档解构函数参数