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

如何通过JSDoc在调用函数时传递非参数泛型类型T?

在JSDoc中调用函数时传递非参数关联的泛型类型

针对你给出的代码场景,泛型T没有对应的入参来让类型检查器自动推断,需要通过手动标注的方式在调用时指定T的具体类型,以下是两种可行方案:

方案一:使用类型断言指定泛型

先定义T对应的具体类型,再通过@type断言将函数指定为带有该泛型的版本:

/**
 * @template T
 * @template {string} C
 * @param {string} param1 
 * @param {string} param2
 * @param {C[]} except - Properties in the object to cache.
 * 
 * @returns {Promise<{ data1: Pick<T, C>, data2: string, data3: string }>}
 */
const functionName = async function(param1, param2, except = []) {
  return {
    data1: {},
    data2: '',
    data3: ''
  };
}

// 定义泛型T对应的具体类型
/** @typedef {{ prop1: string, prop2: number, prop3: boolean }} MyTargetType */

// 调用时通过类型断言指定泛型T
const res = await /** @type {typeof functionName<MyTargetType>} */(functionName)('foo1', 'foo2', ['prop1', 'prop2']);

方案二:直接断言返回值类型

如果只关注返回值的类型正确性,也可以直接对返回结果做类型断言:

/** @typedef {{ prop1: string, prop2: number, prop3: boolean }} MyTargetType */

const res = await /** @type {Promise<{ data1: Pick<MyTargetType, 'prop1'|'prop2'>, data2: string, data3: string }>} */(
  functionName('foo1', 'foo2', ['prop1', 'prop2'])
);

这两种方式都能让类型检查器识别出data1的具体类型为Pick<MyTargetType, 'prop1'|'prop2'>,满足调用时传递泛型T的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 14:03:16