PhpStorm/WebStorm中JSDoc能否标注接收原型并返回实例的方法?
当然可以实现这种类型标注!
你已经找对了方向,只需要调整JSDoc里的构造函数类型声明和模板语法,就能让PhpStorm/WebStorm完美识别这个方法的类型关联。
修正后的正确写法
/** * 创建指定构造函数的实例 * @template T * @param {new(props: Object): T} Model 要实例化的构造函数(原型对应的类/构造器) * @param {Object} props 实例化时传入的属性参数 * @return {T} 返回构造函数的新实例 */ function create(Model, props) { return new Model(props); }
关键细节解释
@template T:声明一个通用类型变量T,用来关联构造函数和返回值的类型,这样IDE就能追踪到“传入的构造函数类型”和“返回的实例类型”是完全一致的。{new(props: Object): T}:这是JSDoc标注构造函数类型的标准写法,表示Model是一个可以通过new关键字调用、接受Object类型参数、返回T类型实例的构造器。你原来写的prototype<T>不是标准的JSDoc语法,IDE无法正确识别这种类型关联。
实际效果演示
当你在PhpStorm/WebStorm里使用这个函数时,IDE会自动做精准的类型推断:
// 定义一个示例构造函数 class User { constructor(props) { this.name = props.name; this.age = props.age; } greet() { console.log(`Hi, I'm ${this.name}`); } } // 调用create函数 const user = create(User, {name: "Alice", age: 28}); // IDE会自动识别user是User类型,能直接提示greet方法、name/age属性 user.greet(); // 会有完整的代码补全和类型检查
这样配置后,不管你传入什么构造函数,IDE都能准确推断返回实例的类型,提供对应的智能提示和类型校验。
内容的提问来源于stack exchange,提问作者LKHO
相关产品推荐
相关产品推荐

