Function 基于第一个参数的函数参数动态类型
现在我有一个非常通用的函数,当我的客户机与我的服务器对话时,它会命中。因此,为了保持灵活性,我正在这样做:Function 基于第一个参数的函数参数动态类型,function,typescript,visual-studio-code,Function,Typescript,Visual Studio Code,现在我有一个非常通用的函数,当我的客户机与我的服务器对话时,它会命中。因此,为了保持灵活性,我正在这样做: public call(method: string, ...parameters: any[]) {} this.socketManager.call('findOne', ...) this.socketManager.methods.findOne( 但在我的服务器上,我将所有方法放在一起,如下所示: MethodManager.methods({ findOne: {
public call(method: string, ...parameters: any[]) {}
this.socketManager.call('findOne', ...)
this.socketManager.methods.findOne(
但在我的服务器上,我将所有方法放在一起,如下所示:
MethodManager.methods({
findOne: {
function: function(collection: string, query: Object) {
return model(collection).findOne(query).exec();
}
},
find: {
function: function(collection: string, query: Object, sortQuery: Object = {}) {
return model(collection).find(query).sort(sortQuery).exec();
}
}
}
如您所见,每个方法可能有不同的参数。当我在客户机上编写代码时,我无法充分利用Typescript的潜力,因为它是“任意”铸造的
如何使visual studio代码在编写这行代码时能够识别:
this.socketManager.call('findOne',
它会弹出一个助手列表,如下所示:
(method: 'findOne', collection: string, query: Object)
但当我打字时:
this.socketManager.call('find',
它给了我:
(method: 'find', collection: string, query: Object, sortQuery: Object = {})
而不是无用的:
(method: string, ...parameters: any[])
这可能吗?这将对开发有极大的帮助。您可以使用Typescript中的函数重载执行类似操作: 这是:
我通过编写一个脚本来实现这一点,该脚本遍历所有方法文件,解析它们并获取函数和参数。此脚本在编译服务器代码时运行(获取更改),然后在启动时加载的客户端上重新创建生成的methods.ts文件
export function SERVER_METHODS(socketManager) {
return {
findOne: (collection: string, query: Object, cb?: Function) => {
socketManager.call('findOne', collection, query, cb);
},
find: (collection: string, query: Object, sortQuery: Object = {}, cb?: Function) => {
socketManager.call('find', collection, query, sortQuery, cb);
},
...
};
}
那么我是这样用的:
public methods = SERVER_METHODS(this);
现在不是这样做:
public call(method: string, ...parameters: any[]) {}
this.socketManager.call('findOne', ...)
this.socketManager.methods.findOne(
我正在这样做:
public call(method: string, ...parameters: any[]) {}
this.socketManager.call('findOne', ...)
this.socketManager.methods.findOne(
这给了我这个函数的参数。非常手动的解决方案,但它可以工作,现在是自动的。这就是我要找的。还有两个问题。1.这可以动态完成吗?例如,如果我的服务器在连接启动时发送一个可能的方法调用列表,那么客户端是否可以获取该列表并创建您的答案的动态版本?2.是否有方法获取MethodManager.methods(这只是一个方法数组)并提取每个函数所需的函数参数?当然,我可以看到动态生成此函数。从服务器的响应来看,我相信只需对其进行迭代并为每个响应发出一个调用签名。如果是我,我可能会为每个方法生成一个具有单独函数的客户机,而不是单个调用函数。i、 e.您实际上已经定义了
client.find
,client.findOne
。