提问人:Austin Haws 提问时间:11/11/2023 更新时间:11/11/2023 访问量:15
使用 JSDOC for javascript,如何使对象中的单个方法具有模板参数
With JSDOC for javascript, how to make a single method in an object have a template parameter
问:
在 Javascript 中,使用 JSDoc,如何记录@typedef中的单个方法具有泛型/模板化参数?
---- typedef.d.js ----
/**
* @typedef MyService {
* @property {() => string[]} otherFunc
* @template ArrayT
* @property {(a: ArrayT[]) => ArrayT[]} shuffleArray
* }
*/
在上面的 typedef 中,不起作用。它显示了所需的效果,即单个 shuffleArray 方法的类型是泛型的,但 MyService 的其余部分不是。换句话说,shuffleArray 应该能够采用任何数组类型,而不必为该类型实例化新的 MyService 对象。@template ArrayT
---- MyService.js ----
/** @typedef {import('my-app').MyService} MyService */
export const MyService = /** @extends {MyService} */ (
class {
/** @returns {string[]}
otherFunc() {
return ['I', 'am', 'not', 'generic'];
}
/**
* @template ArrayT
* @param {ArrayT[]} a
* @returns {ArrayT[]}
*/
shuffleArray(a) {
return shuffle(a);
}
}
);
上述方法确实有效,但其键入不会中继到应用的其余部分,因为应用的其余部分使用 typedef.d.js 中的 MyService typedef。@template ArrayT
---- someOtherFile.js ----
import MyService from './MyService.js';
const myService = new MyService();
const a1 = myService.shuffleArray([1, 2, 3, 4]);
const a2 = myService.shuffleArray(['1', '2', '3', '4']);
希望使用相同的实例化服务来普遍接受不同类型的数组,而不必使整个 MyService 成为通用的,也不必使用 .any
答: 暂无答案
评论