You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用JSDoc根据参数动态定义函数返回的对象类型?

解决方案

要实现基于参数动态推导返回类型,需要利用JSDoc的泛型捕获传入的列名字面量类型,具体修改如下:

/**
 * @template T extends string
 * @param {T[]} columns - 指定要获取的列名数组
 * @return {Promise<Array<Record<T, unknown>>>} 返回包含指定列的对象数组
 */
async function getData (columns) {
  const df = await dfd.readCSV('http://localhost:3000/datasets/linear-regression/auto-mpg/auto-mpg.csv')
  return Array.from(JSON.parse(JSON.stringify(dfd.toJSON(df.loc({ columns: [...columns] })))))
}

关键说明:

  1. @template T extends string:声明泛型T并限制为字符串类型,用于捕获传入的具体列名字面量(比如'mpg'、'horsepower')。
  2. @param {T[]} columns:将参数columns定义为泛型T的数组,让TypeScript/JSDoc能记住传入的具体列名。
  3. @return {Promise<Array<Record<T, unknown>>>}:Record<T, unknown>表示对象的键为泛型T(即传入的列名),值类型用unknown适配CSV中可能的多种数据类型。如果明确列的具体值类型(比如mpg是数字),可以把unknown替换为对应类型(如number)。

修改后,调用await getData(['mpg', 'horsepower'])时,编辑器会自动推导返回类型为Promise<Array<{ mpg: unknown; horsepower: unknown }>>,完全匹配需求。

内容的提问来源于stack exchange,提问作者nonodev96

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 06:34:57