【问题标题】:how to use interfaces with jsdoc?jsdoc如何使用接口?
【发布时间】:2020-07-23 08:41:07
【问题描述】:
/**
 * @param {Object[]} items - Payload should be an array or objects which includes name property
 * @return {String[]} Returns names of all objects in that array
 *
 */

const namesOfItems = (items) => {
  return items.map((item) => item.name)
}

我有这样的代码。它接受一个名为 items 的参数。如果该对象具有name 属性,则项目应该是任何对象数组,例如usercarcompanycountry 等。目前我在一个项目中使用 jsdoc,我将 @param 装饰器设置为 @param {Object[]} items 但是该声明没有检查该对象是否具有 name 属性。在打字稿中,有接口可以处理这个问题,但我想知道如何设置我的 @param 并显示它只接受具有 name 属性的对象。

寻找如下解决方案:

@param {Array<AnObjectWhichHasName>}

【问题讨论】:

    标签: typescript jsdoc jsdoc3


    【解决方案1】:

    Typescript 不支持通过 JSDoc 定义接口。但是您可以在 @param 中使用对象类型:

    /**
     * @param {{name: string}[]} items
     */
    const namesOfItems = (items) => {
      return items.map((item) => item.name)
    }
    

    或者用@typedef定义对象类型,然后使用:

    /**
     * @typedef {{name: string}} AnObjectWhichHasName
     */
    
    /**
     * @param {AnObjectWhichHasName[]} items
     */
    const namesOfItems = (items) => {
      return items.map((item) => item.name)
    }
    

    或者使用这种替代语法来定义对象类型:

    /**
     * @typedef {Object} AnObjectWhichHasName
     * @property {string} AnObjectWhichHasName.name
     */
    
    /**
     * @param {AnObjectWhichHasName[]} items
     */
    const namesOfItems = (items) => {
      return items.map((item) => item.name)
    }
    

    【讨论】:

      猜你喜欢
      • 2015-01-10
      • 2020-02-21
      • 2020-09-04
      • 1970-01-01
      • 2019-07-31
      • 2021-06-09
      • 1970-01-01
      • 2012-04-27
      • 1970-01-01
      相关资源
      最近更新 更多