【问题标题】:How to pass a generic type argument with JSDoc?如何使用 JSDoc 传递泛型类型参数?
【发布时间】:2021-04-17 17:52:50
【问题描述】:

在放弃之前,我想在这里试一试。

我有一个定义文件,其类型如下:

/**
 * My json decode function, in reality very different
 * implementation (class like) but it works as an example
 */
  function decodeJSON<T = unknown>(str: string): T;

如果我想在 TypeScript 中使用这个泛型,我会做类似的事情 以下

const value = decodeJSON<number[]>("[1,2,3]"); // return type will be number[]

但是在我的实际代码中我不能使用 TypeScript,它只是用于开发目的的类型,而且我似乎无法找到一种方法来告诉我的编辑器我传递给通用参数的类型是什么我得到了正确的类型信息。

我尝试使用 JSDoc 来指定泛型的参数可能与 TypeScript 相同的方式

// I was expecting JSDoc to understand something like this, but it doesn't
/** @type {decodeJSON<number[]>} */
const value = decodeJSON("[1,2,3]"); // Type inference will be unknown

但它不起作用。我真的不在乎运行时的结果是什么,我已经对已经实现的结果进行了健全性检查。我只是想让我的编辑器给我关于通用函数结果的类型提示,以使我的工作(这个函数在我的应用程序中有一些大量使用)更容易

我的编辑器是 WebStorm,以防万一,但这似乎是 JSDoc 的一般限制

【问题讨论】:

  • 是否this help?
  • @JaredSmith 看起来不像,示例仅说明如何使用 @typeparam 来记录泛型,而不是实际实例化它们
  • 当你说你想在 JSDoc 中“使用”或“实例化”一个泛型类型时,究竟是什么意思?
  • 你的编辑器环境应该已经做你想做的了,我想,如果它有良好的打字稿支持。甚至在线打字稿游乐场也会提供关于泛型参数类型悬停的工具提示。将鼠标悬停在函数用法 hereyou should see this 上。你想要别的事情发生吗?
  • @JaredSmith 谢谢,我刚刚编辑了我的答案

标签: typescript jsdoc


【解决方案1】:

显然这不是 JSDoc 能做的事情,尽管确实需要它

https://github.com/microsoft/TypeScript/issues/27387

【讨论】:

    【解决方案2】:

    您可以像这样使用 Jsdoc 传递泛型类型:

    const value = decodeJSON(/** @type {number[]} */("[1,2,3]"))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-04-07
      • 1970-01-01
      • 1970-01-01
      • 2019-02-27
      • 1970-01-01
      • 2019-03-05
      • 1970-01-01
      • 2010-11-15
      相关资源
      最近更新 更多