【问题标题】:JSDoc: assign type to inline variableJSDoc:将类型分配给内联变量
【发布时间】:2019-06-11 00:07:07
【问题描述】:

我可以将类型分配给从第三方库获得object 结果的变量吗?

const result = thirdPartyLib.doSomething();

现在我可能有一个 ES6 类

class MyClass {
  ...
}

我想将我的result 注释为MyClass 类型。

这可以使用 JSDoc 吗?

【问题讨论】:

  • 你在使用 Typescript 吗?如果不是,我不会担心它的类型。
  • 理论上是可以的,你可以在上面打个@type,但是不同的工具处理不同的JSDoc注解的方式可能会有很大差异,所以在不知道是什么的情况下很难提供有用的答案你正在使用这个/你正在使用什么工具/你期望什么结果。
  • 我正在使用 WebStorm,我想对类型进行注释以便更好地完成代码。

标签: javascript webstorm jsdoc


【解决方案1】:

JSDoc @type {…} tag 可以应用于局部变量以声明其类型。

/** @type {MyClass} */
const result = thirdPartyLib.doSomething();

但是,您可以使用@external tag 将JSDoc 类型添加到thirdPartyLib.doSomething(),而不是在调用函数的任何地方添加此声明,从而可以正确推断局部变量类型。

/**
 * @external thirdPartyLib
 */
/**
 * @function external:thirdPartyLib.doSomething
 * @returns {MyClass}
 */

const result = thirdPartyLib.doSomething();

【讨论】:

  • 谢谢,使用像Joi 这样的第三方库会如何工作,它会返回像const {err,result} = Joi.validate(...) 这样的结果。我想成为result 类型为MyClass
  • @AlexanderZeitler 我认为您可以在外部定义中使用“记录类型”语法:@returns {{result: ?MyClass, err: ?Error}}。类型名称前的问号表示它们可以为空(如果设置了错误,我假设结果为空,反之亦然)。我这里没有 PyCharm 来验证它是否正确支持这个,但它应该。
  • 它是否可能对您有用,因为 thirdPartyLib.doSomething() 是由您定义的,WebStorm 从那里推断出类型?
猜你喜欢
  • 1970-01-01
  • 2021-10-22
  • 1970-01-01
  • 2020-04-02
  • 1970-01-01
  • 2019-01-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多