如何用JSDoc为JavaScript类定义泛型类型(无需TypeScript)
用JSDoc实现类的泛型类型推导
要实现你想要的泛型类型推导效果,只需要给MyValue类添加JSDoc的泛型声明,约束属性和方法的类型即可:
/** * @template T */ class MyValue { /** @type {T} */ myValue; /** * 设置值,约束传入值的类型为泛型T * @param {T} value */ setValue(value){ this.myValue = value; } /** * 获取值,返回值类型自动匹配泛型T * @returns {T} */ getValue(){ return this.myValue; } } /* @type { MyValue<number> } */ const a = new MyValue(); a.setValue(123); const av = a.getValue(); // 此时av会被自动推导为number类型 /* @type { MyValue<string> } */ const b = new MyValue(); b.setValue('456'); const bv = b.getValue(); // 此时bv会被自动推导为string类型
关键说明:
@template T:声明一个泛型参数T,让整个类可以复用这个类型变量- 给
myValue属性标注@type {T}:明确属性的类型为泛型参数T setValue方法用@param {T} value:约束传入的参数必须和泛型T的类型一致getValue方法用@returns {T}:指定返回值类型和泛型T绑定
这样配置后,当你用@type {MyValue<number>}或@type {MyValue<string>}标注实例时,编辑器就能自动推导getValue()的返回值类型,实现你要的类型提示效果。
内容的提问来源于stack exchange,提问作者Chester Fung
相关产品推荐
相关产品推荐

