如何通过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
相关产品推荐
相关产品推荐

