如何在JSDoc中定义泛型WeakRef的@typedef并指定泛型参数
你修改的带@template的WeakRef类型定义是正确的,声明变量时直接在类型名后用尖括号包裹要指定的泛型参数即可。
正确的类型标注写法
/** * @type {WeakRef<HTMLElement>} */ #ref;
完整修正后的代码示例
你自定义的WeakRef泛型定义部分无需修改:
/** * @typedef {Object} WeakRef * @template T * @property {function(): T} deref */
业务代码修正后:
export class MyCl { /** * @type {WeakRef<HTMLElement>} */ #ref; /** * @param {HTMLElement} el */ myMethod(el) { this.#ref = new WeakRef(el); } myMethod2() { let htmlEl = this.#ref.deref(); // 此时htmlEl的类型会被正确推导为HTMLElement } }
补充说明
如果你使用的是VSCode内置类型校验、或者其他基于TypeScript的JSDoc校验工具,其本身已经内置了WeakRef的泛型类型定义,你可以省略自己编写的@typedef部分,直接使用WeakRef<HTMLElement>标注类型即可。
内容的提问来源于stack exchange,提问作者user1167761
相关产品推荐
相关产品推荐

