如何为存储ProxyController子类构造函数的对象添加VS2017智能感知文档?
给代理控制器映射对象添加智能感知文档(适配VS2017)
要让Visual Studio 2017的智能感知识别servers对象里存储的都是ProxyController基类的构造函数,用JSDoc标注是最直接有效的方案,毕竟VS2017对JavaScript的JSDoc支持已经相当完善。
步骤1:先给基类补全JSDoc定义
首先确保你的ProxyController基类有清晰的类注释,这样智能感知能准确识别它的类型:
/** * 所有代理控制器的基类,定义通用的代理操作接口 * @class * @property {string} mode - 代理模式标识 * @method start - 启动代理服务 * @method stop - 停止代理服务 */ function ProxyController() { // 基类实现逻辑 } ProxyController.prototype.start = function() { /* ... */ }; ProxyController.prototype.stop = function() { /* ... */ };
步骤2:给servers对象添加类型标注
接下来直接给servers对象加上JSDoc的@type注解,明确每个属性的类型都是ProxyController的构造函数:
/** * 代理模式与对应控制器构造函数的映射表 * 所有构造函数均继承自ProxyController基类,具备统一的接口 * @type {{ * TCP: typeof ProxyController, * UDP: typeof ProxyController, * UDP_sym: typeof ProxyController * }} */ const servers = { TCP: ProxyControllerTCP, UDP: ProxyControllerUDP, UDP_sym: UDPProxyBidirectional };
进阶:用类型别名简化标注
如果后续需要复用这个构造函数类型,可以先定义一个类型别名,让代码更整洁:
/** * 代理控制器构造函数类型,继承自ProxyController基类 * @typedef {typeof ProxyController} ProxyControllerConstructor */ /** * 代理模式到控制器构造函数的映射 * @type {{ * TCP: ProxyControllerConstructor, * UDP: ProxyControllerConstructor, * UDP_sym: ProxyControllerConstructor * }} */ const servers = { TCP: ProxyControllerTCP, UDP: ProxyControllerUDP, UDP_sym: UDPProxyBidirectional };
这样设置后,VS2017的智能感知就能准确识别servers里每个属性的类型——当你输入servers.TCP时,会自动提示基类构造函数的参数、原型上的start/stop方法等,完全符合你需要的基类构造函数提示效果。
内容的提问来源于stack exchange,提问作者Tomáš Zato
相关产品推荐
相关产品推荐

