我可以根据 @param 类型的形状定义 JSDoc @return 类型吗?

Posted

技术标签:

【中文标题】我可以根据 @param 类型的形状定义 JSDoc @return 类型吗?【英文标题】:can I define a JSDoc @return type based on the shape of a @param type? 【发布时间】:2021-03-23 05:45:36 【问题描述】:

假设我有一组对某些数据执行某些处理的函数。它们都采用相同的参数,但返回不同的数据类型:

import 
  getTotalValue,   // @type function(DataObject):number
  getIsComplete    // @type function(DataObject):boolean
 from './helpers';

const totalValue = getTotalValue(data); // @type number
const isComplete = getIsComplete(data);   // @type boolean

我想编写一个辅助函数,它对该数据执行一组转换并立即返回它们的所有值:

const 
  totalValue,   // @type number
  isComplete    // @type boolean
 = applyTransformations(
  totalValue: getTotalValue, // @type function(DataObject):number
  isComplete: getIsComplete  // @type function(DataObject):boolean
);

JSDoc中有没有办法指定参数对象的键/值与返回值对象的键/值之间的关系?

  /**
   * @param ??? transformationFunctions
   * @return ??? an object with the same keys as the param, and values the return values of each transformation function
   */
  function applyTransformations(transformationFunctions) 
    return Object.entries(transformationFunctions).reduce(
      (acc, [k,fn]) => ( ...acc, [k]: fn(dataObject) ), 
    );
  

(辅助函数的参数和返回值的形状和数量可以改变,如果这样可以使打字更容易。这是新代码,没有什么是一成不变的。)

【问题讨论】:

【参考方案1】:

是的,实际上可以。使用@template 标签将在这里发挥作用。

/**
 * @template T
 * @param T value
 * @returns  payload: T 
 */
const createPayload = value => ( payload: value );

【讨论】:

以上是关于我可以根据 @param 类型的形状定义 JSDoc @return 类型吗?的主要内容,如果未能解决你的问题,请参考以下文章

MFC异形窗口-多边形窗口-根据图片自定义窗口形状-CRgn

ArcGIS微课1000例0055:根据图层创建自定义图例符号案例教程

在 ios 7.1 中自定义按钮形状

SCNGeometry 自定义形状出现黑色

可视化框架设计-图表类型

通过自定义形状裁剪 UIImage