如何用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] }))))) }
关键说明:
@template T extends string:声明泛型T并限制为字符串类型,用于捕获传入的具体列名字面量(比如'mpg'、'horsepower')。@param {T[]} columns:将参数columns定义为泛型T的数组,让TypeScript/JSDoc能记住传入的具体列名。@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
相关产品推荐
相关产品推荐

