Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/377.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何记录变量/数组/属性包含构造函数?_Javascript_Node.js_Jsdoc - Fatal编程技术网

Javascript 如何记录变量/数组/属性包含构造函数?

Javascript 如何记录变量/数组/属性包含构造函数?,javascript,node.js,jsdoc,Javascript,Node.js,Jsdoc,有时,我需要使用字符串或数值来决定构造函数之间的关系,这些构造函数共享同一个类 例如,现在我正在实现反向代理,它有几种代理管理模式:TCP、UDP和符号UDP 所以我有一个目标: const servers = { TCP: ProxyControllerTCP, UDP: ProxyControllerUDP, UDP_sym: UDPProxyBidirectional }; 代理将根据先前的初始化请求选择适当的服务器模块 但是我如何记录服务器包含ProxyCont

有时,我需要使用字符串或数值来决定构造函数之间的关系,这些构造函数共享同一个类

例如,现在我正在实现反向代理,它有几种代理管理模式:TCP、UDP和符号UDP

所以我有一个目标:

const servers = {
    TCP: ProxyControllerTCP,
    UDP: ProxyControllerUDP,
    UDP_sym: UDPProxyBidirectional
};
代理将根据先前的初始化请求选择适当的服务器模块


但是我如何记录
服务器
包含
ProxyController
基类的构造函数呢?我需要它来与Visual Studio 2017 intellisense合作。

答案包括两件事,这两件事都很难弄清楚

1.记录对象的值类型 这是记录对象包含哪些值的语法:

/** @type {[key: string]: number} **/
const myObjOfNumbers = {};

// Visual studio hints number type, even though the value is not defined right now
const num = myObjOfNumbers["hello world"];
2.定义构造函数类型 这更直观:

/** @type {new HTMLElement} **/
const test = null;
// Visual studio hints HTMLElement type, even though HTMLElement does not 
// have a public constructor
const elm = new test();
你的力量加在一起: 我现在可以使用
新服务器[“UDP”]
并获得基类的类型提示

/** @type {{[x:string]: new ProxyController}} **/
const servers = {
    TCP: ProxyControllerTCP,
    UDP: ProxyControllerUDP,
    UDP_sym: UDPProxyBidirectional
};